Ternäre Logik¶
Gemäß dem SQL-Standard ist die ternäre Logik oder die aus drei Werten bestehende Logik (3VL) ein Logiksystem mit drei Wahrheitswerten: TRUE, FALSE und UNKNOWN. In Snowflake wird UNKNOWN durch NULL dargestellt. Die ternäre Logik gilt für die Auswertung boolescher Ausdrücke sowie Prädikate und beeinflusst die Ergebnisse logischer Operationen wie AND, OR und NOT:
Bei Verwendung in Ausdrücken (z. B. in einer SELECT-Liste) werden UNKNOWN-Ergebnisse als NULL-Werte zurückgegeben.
Bei Verwendung als Prädikat (z. B. in einer WHERE-Klausel) werden UNKNOWN-Ergebnisse zu FALSE ausgewertet.
Unter diesem Thema:
Wahrheitstabellen¶
In diesem Abschnitt werden die Wahrheitstabellen für die Vergleichs- und logischen Operatoren beschrieben.
Vergleichsoperatoren¶
Wenn für einen Vergleichsoperator ein Operand NULL ist, ist das Ergebnis NULL. Die Vergleichsoperatoren und -funktionen sind:
Logische Operatoren¶
Bei einer BOOLEAN-Spalte C
:
Wenn |
ergibt |
ergibt |
ergibt |
---|---|---|---|
TRUE |
NULL |
TRUE |
FALSE |
FALSE |
FALSE |
NULL |
TRUE |
NULL |
NULL |
NULL |
NULL |
Darüber hinaus gilt:
Wenn |
ergibt |
ergibt |
ergibt |
---|---|---|---|
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
TRUE |
NULL |
NULL |
NULL |
NULL |
NULL |
Nutzungshinweise für bedingte Ausdrücke¶
Dieser Abschnitt beschreibt die spezifische Verhaltensweise von bedingten Ausdrücken.
IFF-Verhalten¶
IFF liefert die folgenden Ergebnisse für ternäre Logik. Bei einer BOOLEAN-Spalte C
:
Wenn |
ergibt |
---|---|
TRUE |
|
FALSE |
|
NULL |
|
[NOT] IN-Verhalten¶
[ NOT ] IN liefert die folgenden Ergebnisse für ternäre Logik. Bei 3 numerischen Spalten c1
, c2
und c3
:
c1 IN (c2, c3, ...)
ist syntaktisch äquivalent zu(c1 = c2 OR c1 = c3 OR ...)
.Wenn der Wert von
c1
NULL ist, ergibt der Ausdruckc1 IN (c2, c3, NULL)
daher immer NULL.c1 NOT IN (c2, c3, ... )
ist syntaktisch äquivalent zu(c1 <> c2 AND c1 <> c3 AND ...)
.Selbst wenn
c1 NOT IN (c2, c3)
TRUE ist, ergibtc1 NOT IN (c2, c3, NULL)
NULL.