三元逻辑¶
如 SQL 标准中所述,三元逻辑或三值逻辑 (3VL) 是具有三个真实值的逻辑系统:TRUE、FALSE 和 UNKNOWN。在 Snowflake 中,UNKNOWN 使用 NULL 来表示。三元逻辑适用于布尔表达式和谓词的计算,还会影响逻辑运算的结果,如 AND、OR 和 NOT:
本主题内容:
真实值表¶
比较运算符¶
如果比较运算符的任何操作数为 NULL,则结果为 NULL。比较运算符包括:
逻辑运算符¶
给定 BOOLEAN 列 C
:
如果 |
|
|
|
---|---|---|---|
TRUE |
NULL |
TRUE |
FALSE |
FALSE |
FALSE |
NULL |
TRUE |
NULL |
NULL |
NULL |
NULL |
此外:
如果 |
|
|
|
---|---|---|---|
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
TRUE |
NULL |
NULL |
NULL |
NULL |
NULL |
条件表达式的使用说明¶
本部分介绍特定于以下条件表达式的行为。
IFF 行为¶
IFF 函数会为三元逻辑返回以下结果。给定 BOOLEAN 列 C
:
如果 |
|
---|---|
TRUE |
|
FALSE |
|
NULL |
|
[ NOT ] IN 行为¶
[ NOT ] IN 函数为三元逻辑返回以下结果。给定 3 个数值列 c1
、c2
和 c3
:
c1 IN (c2, c3, ...)
在语法上等价于(c1 = c2 or c1 = c3 or ...)
。因此,当
c1
的值为 NULL 时,表达式c1 IN (c2, c3, NULL)
的计算结果始终为 FALSE。c1 NOT IN (c2, c3, ... )
在语法上等价于(c1 <> c2 AND c1 <> c3 AND ...)
。因此,即使
c1 NOT IN (c2, c3)
为 TRUE,c1 NOT IN (c2, c3, NULL)
的计算结果也为 NULL。