标准 SQL 布尔运算符 IS 与等于 (=) 运算符

问题描述 投票:0回答:2

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

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

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

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

当 IS 是常规布尔运算符时,为什么会有 ?是为了确保您可以使用具有非布尔值的“IS NULL”构造而无需类型强制吗?不鼓励使用“=NULL”吗?

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

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

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

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

sql null boolean-logic ansi-sql
2个回答
31
投票

有关三值逻辑的现代 SQL 页面提到了这些,并表示

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 |
+---------+---------+---------+---------+

6
投票

正如上面海报所说,

null = null
不正确。它将返回 NULL(false)

对于空比较,您必须使用

IS NULL
IS NOT NULL

© www.soinside.com 2019 - 2024. All rights reserved.