在SQL Server中,“is not null”和“<> Null”的区别是什么?
在SQL Server中,“is not null”和“<> Null”的区别是什么?
你能帮我吗?我需要了解以下代码之间的区别:
select * from table where field <> NULL;
和
select * from table where field is not NULL;
并且看到以下结果:
SELECT COUNT(*) where (1 = null) -- 返回 0 SELECT COUNT(*) where (1 <> null) -- 返回 0 SELECT COUNT(*) where (1 is not null) -- 返回 1 SELECT COUNT(*) where (null = null) -- 返回 0 SELECT COUNT(*) where (null <> null) -- 返回 0 SELECT COUNT(*) where (null is null) -- 返回 1 SELECT COUNT(*) where (null is not null) -- 返回 0
为什么 null = null
是错误的?
提前感谢您的帮助。
"IS NOT NULL" 和 "<> NULL" 在 SQL Server 中的区别是什么?
在 SQL Server 中,当使用比较运算符(如=、<>、<、>等)与NULL进行比较时,结果始终为NULL。因此,应该使用"IS NULL/IS NOT NULL"来代替比较运算符。
为什么"NULL = NULL"是false?
根据《SQL and the Snare of Three-Valued Logic》一文中的说明,NULL分为两种情况:
1. 值缺失,因为该值是未知的。
2. 属性缺失。
当尝试比较NULL时,实际上在进行类似"UNKNOWN = UNKNOWN"的比较。这个结果是未知的,而不是false。
事实上,NULL在WHERE子句中被视为未知,只是在一些简单的情况下看起来像false。如果在WHERE子句中一致地将其视为false,那么"SELECT 1 WHERE NOT (NULL = NULL)"将返回1。但实际上,它返回的是空。
解决方法:
为了避免混淆和错误的结果,应该使用"IS NULL/IS NOT NULL"来判断NULL的存在与否,而不是使用比较运算符进行比较。这样可以确保得到正确的结果。