我有一个sql语句,我在其中检查一列以确保单词' call'不是这样的:
select * from TableName where PFSeat <> 'call'
但是此声明不包括PFSeat为Null的记录。为了得到我需要的所有记录,我必须将语句改为看起来像这样
select * from TableName where (PFSeat <> 'call' OR PFSeat Is Null)
有没有理由将它编码到我从第一个语句中得到我需要的所有记录?是什么原因?
答案 0 :(得分:1)
您可以(并且应该)将第一个语句读作“PFSeat
具有值的所有行,并且该值不是'call'
”。
这是几十年前做出的选择,NULL
不是一个值,而是缺少一个值。大多数(如果不是全部)DBMS都遵守该规则,否则许多查询将开始产生意外结果。
所以NULL
不是一个值,它是一个属性,意味着不存在任何值
根据定义,SQL中的任何部分或参数为NULL
的许多子句都将生成NULL
。
答案 1 :(得分:0)
看看SQL not displaying null values on a not equals query?。使用PFSeat <> 'call'
将记录与PFSeat设置为NULL进行比较时,结果不为TRUE。结果为NULL,因此您看不到这些记录。 @PeterB是对的,因为NULL不是值。