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

Mar*_*urd 11 sql null

对于什么x

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

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

我的猜测是什么时候x IS NULL NULL,但我无法猜测是什么时候(即我没有检查SQL标准). 这个猜测是不正确的.

Tho*_*mas 15

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


Dan*_*olo 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      |
+--------+-------------+---------+--------------+
Run Code Online (Sandbox Code Playgroud)

请注意,第2列和第4列对于x(NULL或者NOT NULL)的所有潜在值都是相同的