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

Jan*_*sen 19 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谓词>仍然存在.

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

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

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

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

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

Mar*_*ith 16

这对我来说是新的.

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

这些与他们的平等对手不同,因为他们只评估TrueFalse.永远不要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    |
+---------+-------+-------+---------+
Run Code Online (Sandbox Code Playgroud)

相反

+---------+---------+---------+---------+
|    =    |  TRUE   |  FALSE  | UNKNOWN |
+---------+---------+---------+---------+
| TRUE    | TRUE    | FALSE   | UNKNOWN |
| FALSE   | FALSE   | TRUE    | UNKNOWN |
| UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN |
+---------+---------+---------+---------+
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 5

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

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

  • ***它将返回 NULL(false)*** 不是有效的语句。`NULL !== FALSE`、`NULL !== TRUE`、`NULL !== NULL`。它只是*未定义*。 (2认同)