3値論理

SQL 標準で指定されているように、3値論理(3VL)は、 TRUE、 FALSE、そして UNKNOWN という3つの真理値を持つ論理システムです。Snowflakeでは、 UNKNOWN は NULLで表されます。3値論理は、ブール式と述語の評価に適用され、 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 関数は、3値論理に対して次の結果を返します。 BOOLEAN 列 C が与えられた場合:

C が次の場合:

IFF(C, e1, e2) の評価:

TRUE

e1

FALSE

e2

NULL

e2

[ NOT ] IN 動作

[ NOT ] IN 関数は、3値論理に対して次の結果を返します。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と評価されます。