在SQL Server中,“is not null”和“<> Null”的区别是什么?

26 浏览
0 Comments

在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 是错误的?

提前感谢您的帮助。

0
0 Comments

"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的存在与否,而不是使用比较运算符进行比较。这样可以确保得到正确的结果。

0