什么时候`x IS NOT NULL`与`NOT(x IS NULL)`不一样

时间:2010-05-18 16:29:56

标签: sql null

x是什么

  

表达式x IS NOT NULL 不等于NOT(x IS NULL),如2VL中的情况

(引自this answer,引用Fabian Pascal 数据库管理中的实际问题 - 思维从业者的参考 - 接近答案的结尾)

我的猜测是当x IS NULL 为空时,但我无法猜测是什么时候(即我没有检查过SQL标准)。 < em>这个猜测不正确。

2 个答案:

答案 0 :(得分:15)

从我读过的内容来看,Fabian Pascal并没有提到与Null相比的标量值,而是很少实现的ROW类型。在标准中,我们的想法是您可以使用IS NULL比较一个表(行)来确定是否所有值都设置为NULL值。因此,X IS NULL意味着所有值都设置为NULL值,X IS NOT NULL意味着没有值设置为NULL值,NOT (X IS NULL)意味着并非所有值都设置为NULL值或,换句话说,存在至少一个未设置为NULL的值。当然,我在这里轻轻地踩着巨人的肩膀,但这就是我对他的陈述的解释。

答案 1 :(得分:10)

x IS NULL永远不会是NULL所以x

的所有内容都相同

真相表啊啊:

+--------+-------------+---------+--------------+
|   x    |x IS NOT NULL|x IS NULL|NOT(x IS NULL)|
+--------+-------------+---------+--------------+
|NULL    |    FALSE    |  TRUE   |    FALSE     |
|NOT NULL|    TRUE     |  FALSE  |    TRUE      |
+--------+-------------+---------+--------------+

请注意,对于x的所有潜在值(NULLNOT NULL

,第二列和第四列是相同的