本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
逻辑运算符
逻辑运算符允许您创建条件并测试其结果。
| 运算符 | 一元/二进制 | 说明 | 运算对象 |
|---|---|---|---|
|
NOT |
U |
逻辑求反 |
布尔值 |
|
AND |
B |
连词 |
布尔值 |
|
或 |
B |
析取 |
布尔值 |
|
IS |
B |
逻辑断言 |
布尔值 |
|
IS NOT UNKNOWN |
U |
否定未知比较: <expr> IS NOT UNKNOWN |
布尔值 |
|
IS NULL |
U |
Null 比较: <expr> IS NULL |
任何 |
|
IS NOT NULL |
U |
否定 null 比较: <expr> IS NOT NULL |
任何 |
|
= |
B |
等于 |
任何 |
|
!= |
B |
不等于 |
任何 |
|
<> |
B |
不等于 |
任何 |
|
> |
B |
Greater than |
有序类型(数字、字符串、日期、时间) |
|
>= |
B |
大于或等于(不小于) |
有序类型 |
|
< |
B |
Less than |
有序类型 |
|
<= |
B |
小于或等于(不大于) |
有序类型 |
|
BETWEEN |
三元 |
范围比较: col1 BETWEEN expr1 AND expr2 |
有序类型 |
|
IS DISTINCT FROM |
B |
区别 |
任何 |
|
IS NOT DISTINCT FROM |
B |
否定区别 |
任何 |
三态布尔逻辑
SQL 布尔值有三种可能的状态,而不是通常的两种状态:TRUE、FALSE 和 UNKNOWN,其中最后一种等同于布尔值 NULL。TRUE 和 FALSE 运算对象通常根据普通的双态布尔逻辑起作用,但是在将它们与 UNKNOWN 运算对象配对时会适用其他规则,如下表所示。
注意
UNKOWN 表示“可能是 TRUE,也可能是 FALSE”,或者换句话说,“不绝对是 TRUE,也不绝对是 FALSE”。这种理解可以帮助您弄清为什么表中的某些表达式会这样计算。
| 操作 | 结果 |
|---|---|
|
NOT TRUE |
FALSE |
|
NOT FALSE |
TRUE |
|
NOT UNKNOWN |
UNKNOWN |
| 操作 | 结果 |
|---|---|
|
TRUE AND TRUE |
TRUE |
|
TRUE AND FALSE |
FALSE |
|
TRUE AND UNKNOWN |
UNKNOWN |
|
FALSE AND TRUE |
FALSE |
|
FALSE AND FALSE |
FALSE |
|
FALSE AND UNKNOWN |
FALSE |
|
UNKNOWN AND TRUE |
UNKNOWN |
|
UNKNOWN AND FALSE |
FALSE |
|
UNKNOWN AND UNKNOWN |
UNKNOWN |
| 操作 | 结果 |
|---|---|
|
TRUE OR TRUE |
TRUE |
|
TRUE OR FALSE |
TRUE |
|
TRUE OR UNKNOWN |
TRUE |
|
FALSE OR TRUE |
TRUE |
|
FALSE OR FALSE |
FALSE |
|
FALSE OR UNKNOWN |
UNKNOWN |
|
UNKNOWN OR TRUE |
TRUE |
|
UNKNOWN OR FALSE |
UNKNOWN |
|
UNKNOWN OR UNKNOWN |
UNKNOWN |
| 操作 | 结果 |
|---|---|
|
TRUE IS TRUE |
TRUE |
|
TRUE IS FALSE |
FALSE |
|
TRUE IS UNKNOWN |
FALSE |
|
FALSE IS TRUE |
FALSE |
|
FALSE IS FALSE |
TRUE |
|
FALSE IS UNKNOWN |
FALSE |
|
UNKNOWN IS TRUE |
FALSE |
|
UNKNOWN IS FALSE |
FALSE |
|
UNKNOWN IS UNKNOWN |
TRUE |
| 操作 | 结果 |
|---|---|
|
TRUE IS NOT UNKNOWN |
TRUE |
|
FALSE IS NOT UNKNOWN |
TRUE |
|
UNKNOWN IS NOT UNKNOWN |
FALSE |
IS NOT UNKNOWN 本身就是一个特殊的运算符。表达式“x IS NOT UNKNOWN”等同于“(x IS TRUE) OR (x IS FALSE)”,而不是“x IS (NOT UNKNOWN)”。因此,在上表中替换:
| x | 操作 | 结果 | 在“(x IS TRUE) OR (x IS FALSE)”中替换 x 的结果 | |
|---|---|---|---|---|
|
TRUE |
TRUE IS NOT UNKNOWN |
TRUE |
变为 |
“(TRUE IS TRUE) OR (TRUE IS FALSE)”,即 TRUE |
|
FALSE |
FALSE IS NOT UNKNOWN |
TRUE |
变为 |
“(FALSE IS TRUE) OR (FALSE IS FALSE)”,即 TRUE |
|
UNKNOWN |
UNKNOWN IS NOT UNKNOWN |
FALSE |
变为 |
“(UNKNOWN IS TRUE) OR (UNKNOWN IS FALSE)”,即 FALSE, 因为 UNKNOWN 既不是 TRUE 也不是 FALSE |
由于 IS NOT UNKNOWN 是一个特殊的运算符,因此上述运算在 IS 这个词周围是不可传递的:
| 操作 | 结果 |
|---|---|
|
NOT UNKNOWN IS TRUE |
FALSE |
|
NOT UNKNOWN IS FALSE |
FALSE |
|
NOT UNKNOWN IS UNKNOWN |
TRUE |
| 操作 | 结果 |
|---|---|
|
UNKNOWN IS NULL |
TRUE |
|
UNKNOWN IS NOT NULL |
FALSE |
|
NULL IS NULL |
TRUE |
|
NULL IS NOT NULL |
FALSE |
| 操作 | 结果 |
|---|---|
|
UNKNOWN IS DISTINCT FROM TRUE |
TRUE |
|
UNKNOWN IS DISTINCT FROM FALSE |
TRUE |
|
UNKNOWN IS DISTINCT FROM UNKNOWN |
FALSE |
|
UNKNOWN IS NOT DISTINCT FROM TRUE |
FALSE |
|
UNKNOWN IS NOT DISTINCT FROM FALSE |
FALSE |
|
UNKNOWN IS NOT DISTINCT FROM UNKNOWN |
TRUE |
通常,“x IS DISTINCT FROM y”类似于“x <> y”,在 x 或 y(而非二者)为 NULL 时也为 true 的情况除外。DISTINCT FROM 与“相同”相反,后者的通常含义是值(true、false 或 unknown)与其自身相同,并且与其他所有值不同。IS 和 IS NOT 运算符以一种特殊的方式处理 UNKOWN,因为它表示“可能是 TRUE,也许是 FALSE”。
其他逻辑运算符
对于所有其他运算符,传递 NULL 或 UNKNOWN 运算对象将导致结果为 UNKNOWN(与 NULL 相同)。
| 操作 | 结果 |
|---|---|
|
TRUE AND CAST( NULL AS BOOLEAN) |
UNKNOWN |
|
FALSE AND CAST( NULL AS BOOLEAN) |
FALSE |
|
1 > 2 |
FALSE |
|
1 < 2 |
TRUE |
|
'foo' = 'bar' |
FALSE |
|
'foo' <> 'bar' |
TRUE |
|
'foo' <= 'bar' |
FALSE |
|
'foo' <= 'bar' |
TRUE |
|
3 BETWEEN 1 AND 5 |
TRUE |
|
1 BETWEEN 3 AND 5 |
FALSE |
|
3 BETWEEN 3 AND 5 |
TRUE |
|
5 BETWEEN 3 AND 5 |
TRUE |
|
1 IS DISTINCT FROM 1.0 |
FALSE |
|
CAST( NULL AS INTEGER ) IS NOT DISTINCT FROM CAST (NULL AS INTEGER) |
TRUE |