有人能解释一下SQL中的以下行为吗?
SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
有人能解释一下SQL中的以下行为吗?
SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
当前回答
在SQL中,任何用NULL计算的结果都是UNKNOWN
这就是为什么SELECT * FROM MyTable WHERE MyColumn != NULL或SELECT * FROM MyTable WHERE MyColumn <> NULL给出0结果的原因。
为了检查NULL值,提供了isNull函数。
此外,您可以像在第三个查询中使用的那样使用IS操作符。
其他回答
注意,这个行为是默认的(ANSI)行为。
如果你:
SET ANSI_NULLS OFF
http://msdn.microsoft.com/en-us/library/ms188048.aspx
你会得到不同的结果。
SET ANSI_NULLS OFF显然将在未来消失…
在SQL中,任何用NULL计算的结果都是UNKNOWN
这就是为什么SELECT * FROM MyTable WHERE MyColumn != NULL或SELECT * FROM MyTable WHERE MyColumn <> NULL给出0结果的原因。
为了检查NULL值,提供了isNull函数。
此外,您可以像在第三个查询中使用的那样使用IS操作符。
NULL不是任何东西…这是未知的。NULL不等于任何东西。这就是为什么在SQL查询中必须使用神奇的短语is NULL而不是= NULL
你可以参考这个:http://weblogs.sqlteam.com/markc/archive/2009/06/08/60929.aspx
NULL不能使用比较操作符与任何值进行比较。NULL = NULL为false。Null不是一个值。IS运算符是专门为处理NULL比较而设计的。
NULL没有值,因此不能使用标量值操作符进行比较。
换句话说,没有值可以等于(或不等于)NULL,因为NULL没有值。
因此,SQL有特殊的IS NULL和IS NOT NULL谓词来处理NULL。