NULL Werte

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 NULLNIL 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 0, 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.

Wikipedia, Nullwert

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