In den letzten vier Lektionen haben wir manchmal den Wert NULL erwähnt, ohne im Detail darauf einzugehen. Eigentlich handelt es sich bei NULL auch nicht um einen konkreten Wert. Wikipedia schreibt hierzu:
Als Nullwert (kurz NULL, NIL oder ()) bezeichnet man in der Informatik einen Zustand, der das Fehlen eines Wertes anzeigen soll. Nach Edgar F. Codd unterscheidet man zwei Arten von
NULL
: die Abwesenheit eines Wertes, weil keiner existiert (“property inapplicable“), oder die Abwesenheit, da man den Wert (noch) nicht kennt (“value at present unknown“). Ein Nullwert steht für die Abwesenheit eines Wertes, ein Nullwert ist aber gleichzeitig ein Wert.Der Nullwert ist verschieden von der Zahl
Wikipedia, Nullwert0
, da diese einen Wert, also eine Information repräsentiert. Sprachlich wird gelegentlich der Nullwert von der algebraischen Zahl 0 durch die Aussprache unterschieden, indem (wie im Englischen) [‘nʌl] gesprochen wird, um Missverständnisse zu vermeiden.
Man kann sich NULL also als “nicht definiert” vorstellen. Wir können also keine sinnvollen Vergleiche mit NULL anstellen. Das Ergebnis eines Vergleichs mit NULL ist immer der logische Wert UNKNOWN.
NULL in Feldlisten
In Feldlisten kann NULL an machen Stellen auftreten. Beispielsweise bei einem OUTER JOIN oder wenn in einem CASE Ausdruck kein ELSE-Wert definiert ist. Diese Situation können wir mit den folgenden beiden Funktionen abfangen:
- IFNULL(<Wert>, <Fallback>) – Es wird der Wert zurückgegeben, falls dieser nicht NULL ist. Ansonsten wird statt dessen der Fallback Wert verwendet. IFNULL hat immer genau zwei Argumente.
- COALESCE(<Wert1>, <Wert2>[,…] ) – Diese Funktion entspricht mit zwei Argumenten der IFNULL Funktion. Sie kann aber auch mit drei oder noch mehr Argumenten aufgerufen werden. Der Rückgabewert ist der erste Wert, der nicht NULL ist.
NULL in Prädikaten
Mit NULL kann man nicht sinnvoll vergleichen, da das Ergebnis immer UNKNOWN ist. Beispielsweise ergibt das Vergleichsprädikat
WHERE name = NULL
immer logisch UNKNOWN. Deshalb muss man zum Filtern der NULL Werte das IS NULL Prädikat verwenden:
WHERE name IS NULL -- oder WHERE name IS NOT NULL