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 :
Opérateurs logiques¶
Avec une colonne BOOLEAN C
:
Si |
|
|
|
---|---|---|---|
TRUE |
NULL |
TRUE |
FALSE |
FALSE |
FALSE |
NULL |
TRUE |
NULL |
NULL |
NULL |
NULL |
Par ailleurs :
Si |
|
|
|
---|---|---|---|
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 |
|
---|---|
TRUE |
|
FALSE |
|
NULL |
|
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’expressionc1 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.