有人能解释一下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)
当前回答
<>为Standard SQL-92;=是它的等价物。两者都计算值,NULL不是——NULL是一个占位符,表示没有值。
这就是为什么在这种情况下只能使用is NULL/ is NOT NULL作为谓词的原因。
这种行为不是SQL Server特有的。所有符合标准的SQL方言都以相同的方式工作。
注意:如果你的值不是空,你使用is not null进行比较,而如果你的值不是空,你使用<> 'YOUR_VALUE'进行比较。我不能说我的值是否等于NULL,但我可以说我的值是否为NULL或not NULL。如果我的值不是NULL,我可以比较。
其他回答
在SQL中,任何用NULL计算的结果都是UNKNOWN
这就是为什么SELECT * FROM MyTable WHERE MyColumn != NULL或SELECT * FROM MyTable WHERE MyColumn <> NULL给出0结果的原因。
为了检查NULL值,提供了isNull函数。
此外,您可以像在第三个查询中使用的那样使用IS操作符。
<>为Standard SQL-92;=是它的等价物。两者都计算值,NULL不是——NULL是一个占位符,表示没有值。
这就是为什么在这种情况下只能使用is NULL/ is NOT NULL作为谓词的原因。
这种行为不是SQL Server特有的。所有符合标准的SQL方言都以相同的方式工作。
注意:如果你的值不是空,你使用is not null进行比较,而如果你的值不是空,你使用<> 'YOUR_VALUE'进行比较。我不能说我的值是否等于NULL,但我可以说我的值是否为NULL或not NULL。如果我的值不是NULL,我可以比较。
NULL的唯一测试是is NULL或is NOT NULL。检验是否相等是毫无意义的,因为根据定义,人们不知道值是多少。
下面是维基百科上的一篇文章:
https://en.wikipedia.org/wiki/Null_ (SQL)
我们使用
SELECT * FROM MyTable WHERE ISNULL(MyColumn, ' ') = ' ';
返回MyColumn为NULL的所有行或MyColumn为空字符串的所有行。对于许多“最终用户”来说,NULL和空字符串问题是一个没有需要和混淆点的区别。
NULL不能使用比较操作符与任何值进行比较。NULL = NULL为false。Null不是一个值。IS运算符是专门为处理NULL比较而设计的。