我有一个3行的表,在那里我用属性填充了所有的列。我不明白为什么我这样做:
SELECT count(*) FROM person WHERE NULL is NULL;
它给了我结果:你能解释一下吗?
在SQL中,NULL = NULL
不为真。然而,NULL IS NULL
确实成立,并且等价于1=1
。因此,您将获得所有行。
例如,根据SQL Server的MSDN文档:
如果表达式的值为NULL,则is NULL返回TRUE;否则,返回FALSE。
如果表达式的值为NULL, is NOT NULL返回FALSE;否则,返回TRUE。
这里,值NULL
是IS NULL
的有效表达式,因此返回TRUE
。因此,您将获得表中的所有行。
因为对于每个行条件
NULL is NULL
总是为真,所以没有理由过滤行。
下面的条件可以与上面的条件相反
1=0
使用此条件,您将获得0行,因为对于每一行,条件都为false。
'WHERE NULL is NULL'是您正在使用的条件,并且它总是为真,因此它检索所有3个结果。