Es wird geprüft, ob ein Ausdruck den NULL-Wert enthält.
operand IS [NOT] NULL
operand ::=
ausdruck
operand
Operand für den Vergleich. Der Wert von operand muss entweder einfach sein oder der Name einer multiplen Spalte. Ist der Operand eine multiple Spalte, darf die Spaltenangabe keine Außenreferenz, also nicht Spalte eines übergeordneten Abfrage-Ausdrucks sein.
Ergebnis
operand einfach:
Ohne NOT:
Wahr, wenn der Wert von operand der NULL-Wert ist.
Falsch, sonst.
Mit NOT:
Wahr, wenn der Wert von operand nicht der NULL-Wert ist.
Falsch, sonst.
operand multiple Spalte:
Ohne NOT:
Wahr, wenn mindestens eine Ausprägung der multiplen Spalte der NULL-Wert ist.
Falsch, sonst.
Mit NOT:
Wahr, wenn mindestens eine Ausprägung der multiplen Spalte nicht der NULL-Wert ist.
Falsch, sonst.
Beispiele
sprache1 IS NOT NULL
SPRACHE1
im Beispiel ist eine einfache Spalte. Enthält SPRACHE1
keinen NULL-Wert, dann ergibt der Vergleich wahr. Der Vergleich NOT sprache1 IS NULL
liefert in diesem Fall denselben Wahrheitswert.
SPRACHE2(1..5)
ist eine multiple Spalte, die nur in einigen, aber nicht in allen Spalten den NULL-Wert enthält. Der Vergleich sprache2(1..5) IS NOT NULL
ergibt in diesem Fall wahr, während NOT (sprache(1..5) IS NULL)
den Wahrheitswert falsch ergibt.
spalte IS NOT NULL und NOT (spalte IS NULL) sind also nicht äquivalent, wenn spalte eine multiple Spalte ist. Dies wird deutlich, wenn man sprache2(1..5) IS NOT NULL
darstellt als:
sprache2(1) IS NOT NULL OR sprache2(2) IS NOT NULL OR ...
sprache2(5) IS NOT NULL
Der Vergleich ergibt wahr, falls mindestens eine Ausprägung von SPRACHE2
ungleich NULL ist.
NOT (sprache(1..5) IS NULL)
lässt sich dagegen darstellen als:
NOT (sprache(1) IS NULL OR sprache(2) IS NULL ... OR sprache(5) IS NULL)
Dieser Vergleich ergibt wahr, wenn die Vergleiche auf den NULL-Wert in der Klammer nach NOT falsch ergeben, d.h. falls alle Ausprägungen von SPRACHE2 ungleich NULL sind.
Aus der Tabelle AUFTRAG die Aufträge mit Auftragstext und Soll-Termin heraussuchen, die noch nicht fertiggestellt sind, d.h. für die der Ist-Termin der NULL-Wert ist.
SELECT anr, atext, fertigsoll FROM auftrag WHERE fertigist IS NULL anr atext fertigsoll 250 Serienbrief-Einweisung <date> 251 Kunden-Verwaltung <date> 300 Netzwerk-Test/Vergleich 305 Mitarbeiterschulung <date>