这个SQL语法的推理是什么

26 浏览
0 Comments

这个SQL语法的推理是什么

我有一个SQL语句,我在其中检查一个列,以确保单词“call”不在其中,就像这样:

 select * from TableName where PFSeat <> 'call'

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

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

为什么它被编码成我从第一个语句中获取不到我需要的所有记录的原因是什么?原因是什么?

0
0 Comments

这个问题的出现是因为在使用PFSeat <> 'call'比较一个PFSeat值为空的记录时,结果不是TRUE。结果是NULL,因此您看不到这些记录。这是因为NULL不是一个值。

解决方法是使用IS NULLIS NOT NULL来比较NULL值。例如,可以使用PFSeat IS NULL来查找值为空的记录,使用PFSeat IS NOT NULL来查找值不为空的记录。这样可以正确地处理NULL值,并得到正确的结果。

另外,您还可以参考Why NULL never compares false to anything in SQL了解更多关于在SQL中比较NULL的原因。

0
0 Comments

这个问题的出现原因是因为SQL中的语法规定,NULL不是一个值,而是一个属性,表示没有值存在。这是几十年前做出的选择,如果NULL被视为一个值,那么很多查询将产生意料之外的结果。因此,如果SQL语句中的某个部分或参数为NULL,那么结果就会是NULL。

要解决这个问题,我们可以使用IS NULL或IS NOT NULL来检查某个列是否为NULL,而不是直接使用等号或不等号。这样可以避免由于NULL的特殊性而导致的意外结果。在上述例子中,可以使用如下的SQL语句来得到预期的结果:

SELECT * FROM tablename WHERE PFSeat IS NOT NULL AND PFSeat <> 'call';

这样就可以排除掉PFSeat列为NULL或者值为'call'的行,得到符合条件的结果集。通过遵循这种规范,可以更好地处理NULL值,避免产生不必要的困惑和错误。

0