本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
逻辑运算符
逻辑运算符允许您建立条件并测试其结果。
操作符 | 一元/二进制 | 描述 | 运算元 |
---|---|---|---|
NOT |
U |
逻辑非 |
布尔值 |
AND |
B |
连词 |
布尔值 |
或 |
B |
分离 |
布尔值 |
IS |
B |
逻辑断言 |
布尔值 |
不是未知的 |
U |
否定未知比较: <expr> IS NOT UNKNOWN |
布尔值 |
IS NULL |
U |
空比较: <expr> IS NULL |
任何 |
IS NOT NULL |
U |
否定空值比较: <expr> IS NOT NULL |
任何 |
= |
B |
平等 |
任何 |
!= |
B |
不平等 |
任何 |
<> |
B |
不平等 |
任何 |
> |
B |
大于 |
有序类型(数字、字符串、日期、时间) |
>= |
B |
大于或等于 |
有序类型 |
< |
B |
小于 |
有序类型 |
<= |
B |
小于或等于(不大于) |
有序类型 |
BETWEEN |
三元 |
续航里程对比: col1 介于 expr1 和 expr2 之间 |
有序类型 |
IS DISTINCT FROM |
B |
区别 |
任何 |
与没有区别 |
B |
否定区别 |
任何 |
三态布尔逻辑
SQL 布尔值有三种可能的状态,而不是通常的两种状态:TRUE、FALSE 和 UNKNOWN,最后一种状态等同于布尔值 NULL。TRUE 和 FALSE 操作数通常按照普通的两态布尔逻辑运行,但是将它们与 UNKNOWN 操作数配对时会适用其他规则,如下表所示。
注意
UNKOWN 代表 “可能是真的,可能是错误的”,或者换句话说,“不绝对是真的,也不是绝对是错误的”。这种理解可以帮助您阐明为什么表中的某些表达式的计算方式与实际相同。
运算 | 结果 |
---|---|
不是真的 |
FALSE |
不是假的 |
TRUE |
不是未知的 |
UNKNOWN |
运算 | 结果 |
---|---|
真实与真实 |
TRUE |
对与错 |
FALSE |
真实和未知 |
UNKNOWN |
假与真 |
FALSE |
假与假 |
FALSE |
虚假和未知 |
FALSE |
未知和真实 |
UNKNOWN |
未知和错误 |
FALSE |
未知和未知 |
UNKNOWN |
运算 | 结果 |
---|---|
TRUE |
TRUE |
TRUE |
TRUE |
TRUE |
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
假或未知 |
UNKNOWN |
未知或TRUE |
TRUE |
未知或FALE |
UNKNOWN |
未知或未知 |
UNKNOWN |
运算 | 结果 |
---|---|
TRUE |
TRUE |
真是假 |
FALSE |
真是未知 |
FALSE |
假是真的 |
FALSE |
假设置为 “假” |
TRUE |
假是未知的 |
FALSE |
未知是TRUE |
FALSE |
未知设置为 “假” |
FALSE |
未知是未知的 |
TRUE |
运算 | 结果 |
---|---|
真不是未知的 |
TRUE |
FALSE 不是未知的 |
TRUE |
未知不是未知 |
FALSE |
IS NOT UNKNOWN 本身就是一个特殊的运算符。表达式 “x 不是未知” 等效于 “(x 为真) 或 (x 为假)”,而不是 “x 是(非未知)”。因此,在上表中替换为:
x | 运算 | 结果 | 在 “(x 为真) 或 (x 为假)” 中替换 x 的结果 | |
---|---|---|---|---|
TRUE |
真不是未知的 |
TRUE |
变成 |
“(真是假)或(真是假)” ——因此是真的 |
FALSE |
FALSE 不是未知的 |
TRUE |
变成 |
“(假是真的)或(假是假的)” ——因此是真的 |
UNKNOWN |
未知不是未知 |
FALSE |
变成 |
“(未知为真)或(未知为假)” ——因此为假, 因为未知既不是真也不是假 |
由于 IS NOT UNKNOWN 是一个特殊运算符,所以上面的操作不是围绕 IS 这个词传递的:
运算 | 结果 |
---|---|
TRUE |
FALSE |
NOT UNOT |
FALSE |
不是未知就是未知 |
TRUE |
运算 | 结果 |
---|---|
未知设置为 “空” |
TRUE |
未知不为空 |
FALSE |
空设置为 “空” |
TRUE |
空不是空 |
FALSE |
运算 | 结果 |
---|---|
未知与真实不同 |
TRUE |
未知与假不同 |
TRUE |
未知与未知不同 |
FALSE |
未知与真没有区别 |
FALSE |
未知与假没有区别 |
FALSE |
未知与未知没有区别 |
TRUE |
通常,“x IS DISTINCT FROM y”类似于“x <> y”,在 x 或 y(而非二者)为 NULL 时也为 true 的情况除外。DISTINCT FROM 与 distinct FROM 相反,后者的通常含义是某个值(真、假或未知)与其自身相同,与其他所有值不同。IS 和 IS NOT 运算符以特殊的方式对待 UNKOWN,因为它代表 “可能是真的,可能是错误的”。
其他逻辑运算符
对于所有其他运算符,传递 NULL 或 UNKNOWN 操作数将导致结果为 UNKNOWN(与 NULL 相同)。
运算 | 结果 |
---|---|
真值和强制转换(空值为布尔值) |
UNKNOWN |
FALSE 并强制转换(空值为布尔值) |
FALSE |
1 > 2 |
FALSE |
1 < 2 |
TRUE |
'foo' = 'bar' |
FALSE |
'foo' <> 'bar' |
TRUE |
'foo' <= 'bar' |
FALSE |
'foo' <= 'bar' |
TRUE |
3 介于 1 和 5 之间 |
TRUE |
1 介于 3 |
FALSE |
3 介于 3 |
TRUE |
5 介于 3 和 5 之间 |
TRUE |
1 与 1.0 不同 |
FALSE |
强制转换(空为整数)与强制转换(空为整数)没有区别 |
TRUE |