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 :
En cas d’utilisation dans des expressions (par exemple, dans une liste SELECT), les résultats de UNKNOWN sont renvoyés sous forme de valeurs NULL.
En cas d’utilisation comme prédicat (par exemple, dans une clause WHERE), les résultats de 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 et fonctions 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 propre aux expressions conditionnelles.
Comportement IFF¶
IFF renvoie les résultats suivants pour la logique ternaire. Avec une colonne BOOLEAN C
:
Si |
|
---|---|
TRUE |
|
FALSE |
|
NULL |
|
Comportement [NOT] IN¶
[ NOT ] IN renvoie 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 NULL.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.