在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
答案 0 :(得分:15)
对我来说这是一个新的。
如果我读得正确,<boolean value expression>
语法定义了三个谓词,仅用于boolean
数据类型IS TRUE
,IS FALSE
,IS UNKNOWN
。
这些与平等对手的不同之处在于它们仅评估为True
或False
。永远不要Unknown
。即UNKNOWN = TRUE
评估为UNKNOWN
但UNKNOWN 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 NULL
或IS NOT NULL
。