这种SQL语法的原因是什么?

时间:2016-10-13 13:47:31

标签: sql

我有一个sql语句,我在其中检查一列以确保单词' call'不是这样的:

 select * from TableName where PFSeat <> 'call'

但是此声明不包括PFSeat为Null的记录。为了得到我需要的所有记录,我必须将语句改为看起来像这样

 select * from TableName where (PFSeat <> 'call' OR PFSeat Is Null)

有没有理由将它编码到我从第一个语句中得到我需要的所有记录?是什么原因?

2 个答案:

答案 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不是值。

另请查看Why NULL never compares false to anything in SQL