T SQL检查null语法混乱

时间:2018-12-02 08:25:48

标签: sql-server tsql

我继续在SQL Server中将select语句写为null的

<vendor>

这是不正确的

而不是

SELECT * 
FROM TABLE_1 
WHERE VALUE = NULL

SELECT * FROM TABLE_1 WHERE VALUE IS NULL 用于检查值是否为空,而IS用于值是整数或字符串的原因是什么?

3 个答案:

答案 0 :(得分:9)

原因是NULL不是值,而是缺少值。 ANSI标准指出,检查NULL = NULLNULL <> 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仅在以下两种情况下为真:

  • 使用集合运算符时(除,INTERSECT,UNION,UNION ALL)
  • 检查唯一约束中的值

在所有其他情况下,NULL = NULL为假。

这就是原因,当操纵两个结果集时,与SET运算符一起使用是安全的,并且为什么在唯一约束中只允许我们拥有一个NULL值。