25

在 SQL 的 Wikipedia 页面上,有一些关于 SQL 中布尔逻辑的真值表。[1] 维基百科页面似乎源自 SQL:2003 标准。

等号运算符 (=) 的真值表与 SQL:2003 草案中的 IS 运算符不同。

此外,维基百科文章指出“IS NULL”(<null predicate>)是一种特殊情况。

在 SQL:2003 中似乎有一个“IS”运算符,它是一个常规运算符,如 AND、NOT 和 OR。但是,<null 谓词> 仍然存在。

当 IS 是常规布尔运算符时,为什么会有 <null 谓词>?是否确保您可以在没有类型强制的情况下使用具有非布尔值的“IS NULL”构造?是否不鼓励使用“=NULL”?

SQL:2011 标准的工作方式是否不同?

[1]:关于 SQL 的维基百科

[2]:SQL:2011 草稿PDF 第 335 页

[3]:SQL:2003 草稿 PDF 第 397 页

4

2 回答 2

24

这对我来说是一个新的。

如果我没看错,<boolean value expression>语法定义了三个仅用于boolean数据类型IS TRUE, IS FALSE,的谓词IS UNKNOWN

这些与它们的相等对应物的不同之处在于它们仅评估为Trueor False。永远不要Unknown。即将UNKNOWN = TRUE评估为UNKNOWNUNKNOWN IS TRUE评估为False

IS和的完整真值表=如下。

+---------+-------+-------+---------+
|   IS    | TRUE  | FALSE | UNKNOWN |
+---------+-------+-------+---------+
| TRUE    | TRUE  | FALSE | FALSE   |
| FALSE   | FALSE | TRUE  | FALSE   |
| UNKNOWN | FALSE | FALSE | TRUE    |
+---------+-------+-------+---------+

相对于

+---------+---------+---------+---------+
|    =    |  TRUE   |  FALSE  | UNKNOWN |
+---------+---------+---------+---------+
| TRUE    | TRUE    | FALSE   | UNKNOWN |
| FALSE   | FALSE   | TRUE    | UNKNOWN |
| UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN |
+---------+---------+---------+---------+
于 2012-03-22T15:57:57.330 回答
5

正如上面的海报所说,null = null是不正确的。它将返回NULL (false)

对于 null 比较,您必须使用IS NULLor IS NOT NULL

于 2012-03-22T15:10:03.187 回答