在 SQL 的维基百科页面上有一些关于 SQL 中布尔逻辑的真值表。 [1] 维基百科页面似乎源自 SQL:2003 标准。
等于运算符 (=) 的真值表与 SQL:2003 草案中的 IS 运算符不同。
此外,维基百科文章指出“IS NULL”(
在 SQL:2003 中似乎有一个“IS”运算符,它是一个常规运算符,如 AND、NOT 和 OR。然而,
当 IS 是常规布尔运算符时,为什么会有
SQL:2011 标准的工作方式是否有所不同?
[1]:关于 SQL 的维基百科
[2]:SQL:2011 草案 PDF 第 335 页
[3]:SQL:2003 草案 PDF 第 397 页
F571
已作为可选功能添加到 SQL:1999
。
<boolean value expression>
语法定义了三个谓词,仅用于 boolean
数据类型 IS TRUE
、IS FALSE
、IS UNKNOWN
。
它们与相等对应项的不同之处在于它们仅计算为
True
或 False
。永远不要Unknown
。即 UNKNOWN = TRUE
将计算为 UNKNOWN
但 UNKNOWN IS TRUE
计算为 False
。
当想要返回
<some_expression>
为 true
或 unknown
的行时,它们很有用。
无需重复
<some_expression>
只需书写即可完成此操作
WHERE <some_expression> IS NOT 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 |
+---------+---------+---------+---------+
正如上面海报所说,
null = null
不正确。它将返回 NULL(false)
对于空比较,您必须使用
IS NULL
或 IS NOT NULL
。