三元逻辑

如 SQL 标准中所述,三元逻辑或三值逻辑 (3VL) 是具有三个真实值的逻辑系统:TRUE、FALSE 和 UNKNOWN。在 Snowflake 中,UNKNOWN 使用 NULL 来表示。三元逻辑适用于布尔表达式和谓词的计算,还会影响逻辑运算的结果,如 AND、OR 和 NOT:

  • 在表达式(例如 SELECT 列表)中使用时,UNKNOWN 结果会以 NULL 值的形式返回。

  • 当用作谓词(例如 WHERE 子句)时,UNKNOWN 结果的计算结果为 FALSE。

本主题内容:

真实值表

本部分介绍用于 比较 的真实值表和 逻辑 运算符。

比较运算符

如果比较运算符的任何操作数为 NULL,则结果为 NULL。比较运算符包括:

=!=<>

< , <= , >>=

GREATESTLEAST

逻辑运算符

给定 BOOLEAN 列 C

如果 C 为:

C AND NULL 计算结果为:

C OR NULL 计算结果为:

NOT C 计算结果为:

TRUE

NULL

TRUE

FALSE

FALSE

FALSE

NULL

TRUE

NULL

NULL

NULL

NULL

此外:

如果 C 为:

C AND (NOT C) 计算结果为:

C OR (NOT C) 计算结果为:

NOT (C OR NULL) 计算结果为:

TRUE

FALSE

TRUE

FALSE

FALSE

FALSE

TRUE

NULL

NULL

NULL

NULL

NULL

条件表达式的使用说明

本部分介绍特定于以下条件表达式的行为。

IFF 行为

IFF 函数会为三元逻辑返回以下结果。给定 BOOLEAN 列 C

如果 C 为:

IFF(C, e1, e2) 计算结果为:

TRUE

e1

FALSE

e2

NULL

e2

[ NOT ] IN 行为

[ NOT ] IN 函数为三元逻辑返回以下结果。给定 3 个数值列 c1c2c3

  • 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。

语言: 中文