Aus NULL wird NULL

Alexander Achenbach/ Datenanalyse, Datenbank, SQL

Oder aus nichts wird nichts? In SQL gilt en simpler Grundsatz:

Null always evaluates null

Aus einem leeren Wert ergibt sich immer ein leerer Wert.

Berechnet man z.B. im SELECT Abschnitt eines SQL Befehls einen Wert und verwendet Felder darin, welche gar keinen Wert haben, ist auch das Formelergebnis – leider – NULL. Auch wenn in einer Formel mit 10 Faktoren ein einziger NULL ist, das Ergebnis ist NULL.

SELECT
   a.*,
   a.umsatz * a.rabatt AS umsatz_rabatt
FROM
   auftrag a
;

Gehen wir einmal davon aus, dass jeder Auftrag einen konkreten Umsatz hat, aber nur manche Aufträge etwas in Rabatt stehen haben. Hat in einem Datensatz ein Auftrag keinen Rabatt – rabatt hat also den „Wert“ NULL -, ist umsatz_rabatt auch NULL. Beim weiterrechnen oder analysieren bleibt das Problem bestehen. Würden wir beispielsweise irgendwann den Endbetrag berechnen wollen (umsatz umsatz_rabatt) hätten Aufträge ohne Rabatt auch keinen Wert im Endbetrag.

ORACLE: NVL( wert , ersatz_falls_null )

liefert wert einen konkreten Wert, wird dieser durchgereicht. Sollte wert aber NULL sein, liefert NVL den ersatz_falls_null als Ergebnis.

Lösung: Wir betten den kritischen Faktor – in unserem Beispiel rabatt – innerhalb der Formel in die NVL() Funktion:

SELECT
   a.*,
   a.umsatz * NVL( a.rabatt, 0 ) AS umsatz_rabatt
FROM
   auftrag a
;

Übrigens: In Oracle heißt die Funktion NVL(), im MS SQL Server ISNULL(), bei MySQL IFNULL() und in MS Access NZ(). Die Syntax ist dabei jeweils gleich.
Aus NULL wird NULL ist also für alle Datenbankmanagementsysteme ein Thema! In Excel haben Sie das Problem nicht, da leere Zellen wie die Zahl 0 behandelt werden.

Share this Post