我有一个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