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. SELECT-Liste) werden UNKNOWN-Ergebnisse als NULL-Werte zurückgegeben.
Bei Verwendung als Prädikat (z. B. WHERE-Klausel) werden UNKNOWN-Ergebnisse als 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. Vergleichsoperatoren 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¶
In diesem Abschnitt wird das Verhalten der folgenden bedingten Ausdrücke beschrieben.
IFF-Verhalten¶
Die Funktion IFF gibt die folgenden Ergebnisse für die ternäre Logik zurück. Bei einer BOOLEAN-Spalte C
:
Wenn |
ergibt |
---|---|
TRUE |
|
FALSE |
|
NULL |
|
[NOT] IN-Verhalten¶
Die Funktionen [ NOT ] IN geben die folgenden Ergebnisse für die ternäre Logik zurück. 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 FALSE.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.