我有一个包含3行的表,我在其中填充了所有具有属性的列。当我这样做时,我无法理解为什么:
SELECT count(*) FROM person WHERE NULL is NULL;
它给了我结果:3。 你能解释一下吗?
答案 0 :(得分:3)
因为每个行条件
NULL is NULL
始终为true,因此没有理由过滤行。
以下情况可能与上述情况相反
1=0
在这种情况下你会获得0行,因为对于每一行,条件都是假的。
答案 1 :(得分:3)
在SQL中,NULL = NULL
不正确。但是,NULL IS NULL
确实如此,相当于1=1
。因此,您将获得所有行。
例如,根据SQL Server的MSDN文档:
如果expression的值为NULL,则IS NULL返回TRUE;否则,它返回FALSE。
如果expression的值为NULL,则IS NOT NULL返回FALSE;否则,它返回TRUE。
此处,值NULL
是IS NULL
的有效表达式,因此返回TRUE
。因此,您可以从表中获取所有行。
答案 2 :(得分:0)
'WHERE NULL is NULL'是您正在使用的条件,它始终为true,因此它会检索所有3个结果。