这个SQL语法的推理是什么?



我有一个sql语句,我检查一列,以确保单词'call'不像这样:

 select * from TableName where PFSeat <> 'call'

但是这个语句将不包括PFSeat为Null的记录。为了获得我需要的所有记录,我必须将语句更改为如下所示

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

是否有一个原因,为什么它是编码到哪里我不得到所有的记录,我需要从第一个语句?原因是什么?

您可以(并且应该)将第一个语句读取为" PFSeat有值的所有行,该值不是'call' "。
这是由于几十年前的一个选择,NULL不是一个值,而是没有值。大多数(如果不是所有的话)DBMS都遵守该规则,否则许多查询将开始产生意想不到的结果。

所以NULL不是一个值,它是一个属性,意思是没有值存在。
根据定义,SQL中的许多子句中任何部分或参数为NULL都会生成NULL

看看SQL在不等于查询上不显示空值?. 当使用PFSeat <> 'call'比较PFSeat设置为NULL的记录时,结果不为TRUE。结果是NULL,因此您看不到这些记录。@PeterB是对的,这是因为NULL不是一个值。

还可以看看为什么NULL永远不会将false与SQL

中的任何内容进行比较

最新更新