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

时间:2012-03-22 12:20:03

标签: sql null boolean-logic ansi-sql

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

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

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

在SQL:2003中,似乎有一个“IS”操作符,它是一个常规运算符,如AND,NOT和OR。但是,< null谓词>还在那里。

为什么< null谓词>当IS是常规布尔运算符时?它是否确保您可以使用具有非布尔值的“IS NULL”构造而不使用类型coersion?不鼓励使用“= NULL”?

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

[1]:Wikipedia on SQL

[2]:SQL:2011 draft PDF第335页

[3]:SQL:2003 draft PDF page 397

2 个答案:

答案 0 :(得分:15)

对我来说这是一个新的。

如果我读得正确,<boolean value expression>语法定义了三个谓词,仅用于boolean数据类型IS TRUEIS FALSEIS UNKNOWN

这些与平等对手的不同之处在于它们仅评估为TrueFalse。永远不要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 |
+---------+---------+---------+---------+

答案 1 :(得分:1)

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

对于空值比较,您必须使用IS NULLIS NOT NULL