Logique ternaire

Comme spécifié dans la norme SQL, la logique ternaire, ou logique à trois valeurs (3VL), est un système logique avec trois valeurs de vérité : TRUE, FALSE, et UNKNOWN. Dans Snowflake, UNKNOWN est représenté par NULL. La logique ternaire s’applique à l’évaluation des expressions booléennes, ainsi que des prédicats, et affecte les résultats des opérations logiques telles que AND, OR et NOT :

  • Lorsqu’ils sont utilisés dans des expressions (par ex. liste SELECT), les résultats UNKNOWN sont retournés sous forme de valeurs NULL.

  • Lorsqu’ils sont utilisés comme prédicats (par exemple, une clause WHERE), les résultats UNKNOWN sont évalués sur FALSE.

Dans ce chapitre :

Tables de vérité

Cette section décrit les tables de vérité pour les opérateurs de comparaison et logiques..

Opérateurs de comparaison

Si un opérande pour un opérateur de comparaison est NULL, le résultat est NULL. Les opérateurs de comparaison sont les suivants :

= , != , <>

< , <= , > , >=

GREATEST, LEAST

Opérateurs logiques

Avec une colonne BOOLEAN C :

Si C est :

C AND NULL s’évalue sur :

C OR NULL s’évalue sur :

NOT C s’évalue sur :

TRUE

NULL

TRUE

FALSE

FALSE

FALSE

NULL

TRUE

NULL

NULL

NULL

NULL

Par ailleurs :

Si C est :

C AND (NOT C) s’évalue sur :

C OR (NOT C) s’évalue sur :

NOT (C OR NULL) s’évalue sur :

TRUE

FALSE

TRUE

FALSE

FALSE

FALSE

TRUE

NULL

NULL

NULL

NULL

NULL

Notes sur l’utilisation des expressions conditionnelles

Cette section décrit le comportement spécifique des expressions conditionnelles suivantes.

Comportement IFF

La fonction IFF renvoie les résultats suivants pour la logique ternaire. Avec une colonne BOOLEAN C :

Si C est :

IFF(C, e1, e2) s’évalue sur :

TRUE

e1

FALSE

e2

NULL

e2

Comportement [ NOT ] IN

Les fonctions [ NOT ] IN renvoient les résultats suivants pour la logique ternaire. Avec 3 colonnes numériques c1, c2 et c3 :

  • c1 IN (c2, c3, ...) est syntaxiquement équivalent à (c1 = c2 or c1 = c3 or ...).

    Par conséquent, lorsque la valeur de c1 est NULL, l’expression c1 IN (c2, c3, NULL) s’évalue toujours sur FALSE.

  • c1 NOT IN (c2, c3, ... ) est syntaxiquement équivalent à (c1 <> c2 AND c1 <> c3 AND ...).

    Par conséquent, même si c1 NOT IN (c2, c3) est TRUE, c1 NOT IN (c2, c3, NULL) s’évalue sur NULL.