NULL-Werte
NULL-Werte sind besondere Werte, die in SQL fehlende Daten darstellen. Spalten jedes Typs können NULL-Werte enthalten. Logisch kann ein NULL-Wert als „der Wert dieses Feldes ist unbekannt“ verstanden werden.
Ein NULL-Wert kann in jedes Feld eingefügt werden, das nicht den Qualifier NOT NULL hat:
CREATE TABLE integers (i INTEGER);INSERT INTO integers VALUES (NULL);NULL-Werte haben in vielen Teilen der Abfrage sowie in vielen Funktionen eine besondere Semantik:
Jeder Vergleich mit einem
NULL-Wert liefertNULL, einschließlichNULL = NULL.
Sie können IS NOT DISTINCT FROM verwenden, um einen Gleichheitsvergleich durchzuführen, bei dem NULL-Werte untereinander als gleich gelten. Mit IS (NOT) NULL prüfen Sie, ob ein Wert NULL ist.
SELECT NULL = NULL;NULLSELECT NULL IS NOT DISTINCT FROM NULL;trueSELECT NULL IS NULL;trueNULL und Funktionen
Eine Funktion, die ein Eingabeargument NULL hat, liefert in der Regel NULL.
SELECT cos(NULL);NULLDie Funktion coalesce ist eine Ausnahme: Sie nimmt eine beliebige Anzahl von Argumenten und liefert für jede Zeile das erste Argument, das nicht NULL ist. Sind alle Argumente NULL, liefert coalesce ebenfalls NULL.
SELECT coalesce(NULL, NULL, 1);1SELECT coalesce(10, 20);10SELECT coalesce(NULL, NULL);NULLDie Funktion ifnull ist eine Zwei-Argument-Variante von coalesce.
SELECT ifnull(NULL, 'default_string');default_stringSELECT ifnull(1, 'default_string');1NULL und AND / OR
NULL-Werte verhalten sich in Verbindung mit AND und OR besonders.
Details finden Sie in der Dokumentation zum Boolean-Typ.
NULL und IN / NOT IN
Das Verhalten von ... IN ⟨something with a NULL⟩{:.language-sql .highlight} unterscheidet sich von ... IN ⟨something with no NULLs⟩{:.language-sql .highlight}.
Details finden Sie in der IN-Dokumentation.
NULL und Aggregatfunktionen
NULL-Werte werden in den meisten Aggregatfunktionen ignoriert.
Aggregatfunktionen, die NULL-Werte nicht ignorieren, sind unter anderem: first, last, list und array_agg. Um NULL-Werte aus diesen Aggregatfunktionen auszuschließen, kann die FILTER-Klausel verwendet werden.
CREATE TABLE integers (i INTEGER);INSERT INTO integers VALUES (1), (10), (NULL);SELECT min(i) FROM integers;1SELECT max(i) FROM integers;10