我继续在SQL Server中将select语句写为null的
<vendor>
这是不正确的
而不是
SELECT *
FROM TABLE_1
WHERE VALUE = NULL
SELECT *
FROM TABLE_1
WHERE VALUE IS NULL
用于检查值是否为空,而IS
用于值是整数或字符串的原因是什么?
答案 0 :(得分:9)
原因是NULL
不是值,而是缺少值。 ANSI标准指出,检查NULL = NULL
和NULL <> NULL
都不返回true,而是返回NULL。将NULL视为“未知值”。如果比较3=3
,它将返回true,但是如果比较is some number, that I do not know, equal to some other number, which I do not know either
,则明显的结果是I do not know are they equal
。
您可能也想看看ANSI_NULLS选项。
答案 1 :(得分:1)
因为VALUE=NULL
给出了NULL
的结果,并且如果您在WHERE
语句中使用它,那么它将被处理为false
,就像您使用NOT VALUE=NULL
也会得出NULL
一样。
让我解释以上内容,只是为了澄清我说被视为假时的情况。
如果您在声明中使用:
WHERE value = NULL
或
WHERE NOT (value = NULL)
您将不会获得任何行。
如果您使用:
WHERE value = NULL AND id = 1
同样,您将不会获得任何行。
但是,如果您使用:
WHERE value = NULL OR id = 1
您将获得1行,其中包含id = 1
。
NULL
是 missing 或 unknown 的别名,不能在可以使用1
或'something'
这样的有效值的地方使用被使用。
答案 2 :(得分:1)
在SQL Server的上下文中,NULL = NULL
仅在以下两种情况下为真:
在所有其他情况下,NULL = NULL
为假。
这就是原因,当操纵两个结果集时,与SET
运算符一起使用是安全的,并且为什么在唯一约束中只允许我们拥有一个NULL
值。