Der Umgang mit NULL begegnet dir in den unterschiedlichsten Szenarien: von der Verarbeitung fehlender Daten in Berichten bis hin zu Filterung und Sortierung. Wenn man die Wahl hätte zwischen einem fehlenden Wert in der Tabelle und einer komischen Zahl wie 9999, würden die meisten NULL wählen – ja, ich geb zu, das ist nicht immer bequem, aber wenigstens ehrlich. Schauen wir uns ein paar typische Fälle an.
Beispiel: Sortierung von Produkten mit fehlenden Preisen
Stell dir vor, wir betreiben einen Online-Shop und haben eine Produkttabelle:
| product_id | name | price |
|---|---|---|
| 1 | Handy | 45000 |
| 2 | Laptop | NULL |
| 3 | Kamera | 25000 |
| 4 | Smartwatch | NULL |
Wir wollen die Produkte nach Preis sortieren, wobei Produkte ohne Preis (NULL) am Ende stehen sollen.
SELECT product_id, name, price
FROM products
ORDER BY price ASC NULLS LAST;
Ergebnis:
| product_id | name | price |
|---|---|---|
| 3 | Kamera | 25000 |
| 1 | Handy | 45000 |
| 2 | Laptop | NULL |
| 4 | Smartwatch | NULL |
Achte auf die wichtige Konstruktion NULLS LAST. Standardmäßig packt PostgreSQL bei ASC die NULL-Werte nach vorne, aber mit diesem Parameter schieben wir sie ans Ende.
Beispiel: Filtern von Studierenden ohne Geburtsdatum
Wir haben eine Tabelle mit Studierenden und wollen nur diejenigen auswählen, bei denen kein Geburtsdatum angegeben ist.
| student_id | name | birth_date |
|---|---|---|
| 1 | Otto Art | 2000-01-15 |
| 2 | Anna Song | NULL |
| 3 | Alex Lin | 1999-05-10 |
| 4 | Maria Chi | NULL |
Abfrage:
SELECT student_id, name
FROM students
WHERE birth_date IS NULL;
Ergebnis:
| student_id | name |
|---|---|
| 2 | Anna Song |
| 4 | Maria Chi |
Wir haben erfolgreich Infos über Studierende rausgezogen, deren Geburtsdatum unbekannt ist.
Beispiele für den Einsatz von Funktionen zum Umgang mit NULL
Beispiel: Berechnung der Gesamtsumme unter Berücksichtigung möglicher NULL
In der Bestelltabelle werden die Bestellsummen gespeichert. Aber die Daten sind nicht immer komplett, und wir müssen bedenken, dass in solchen Fällen die Summe 0 sein kann.
Beispieldaten:
| order_id | customer_name | order_amount |
|---|---|---|
| 1 | Alex | 1200 |
| 2 | Maria | 2500 |
| 3 | Max | NULL |
| 4 | Xena | 3100 |
Abfrage:
SELECT SUM(COALESCE(order_amount, 0)) AS total_amount
FROM orders;
Ergebnis:
| total_amount |
|---|
| 6800 |
Wir nutzen COALESCE(order_amount, 0), um NULL vor dem Summieren durch 0 zu ersetzen. So vermeiden wir Fehler oder falsche Berechnungen.
Beispiel: Text statt NULL anzeigen
| customer_name | order_amount |
|---|---|
| Alex | 1200 |
| Maria | 2500 |
| Max | NULL |
| Xena | 3100 |
Im Bericht soll für alle leeren Daten statt NULL der Text "Nicht angegeben" angezeigt werden.
SELECT
customer_name,
COALESCE(order_amount::TEXT, 'Nicht angegeben') AS order_status
FROM orders;
Ergebnis:
| customer_name | order_status |
|---|---|
| Alex | 1200 |
| Maria | 2500 |
| Max | Nicht angegeben |
| Xena | 3100 |
COALESCE() macht es möglich, einen gewünschten Text anzuzeigen, wenn der Wert NULL ist.
Komplexere Szenarien mit NULL
| customer_name | order_amount |
|---|---|
| Alex | 1200 |
| Maria | 2500 |
| Max | NULL |
| Xena | 3100 |
Unsere Aufgabe: Die Bestellungen so sortieren, dass die mit fehlender Summe ganz vorne stehen und danach absteigend von der größten zur kleinsten Summe.
SELECT customer_name, order_amount
FROM orders
ORDER BY order_amount DESC NULLS FIRST;
Ergebnis:
| customer_name | order_amount |
|---|---|
| Max | NULL |
| Xena | 3100 |
| Maria | 2500 |
| Alex | 1200 |
Hier haben wir NULLS FIRST genutzt, um NULL-Werte vor allen anderen zu platzieren.
Beispiel: Filtern von Daten mit Ersetzung von NULL-Werten
| student_id | name | birth_date |
|---|---|---|
| 1 | Otto Art | 2000-01-15 |
| 2 | Anna Song | NULL |
| 3 | Alex Lin | 1999-05-10 |
| 4 | Maria Chi | NULL |
In manchen Berichten sollen nur die Zeilen angezeigt werden, wo der Wert ausgefüllt ist, oder er wird durch "Unbekannt" ersetzt, wenn er NULL ist.
SELECT
student_id,
name,
COALESCE(birth_date::TEXT, 'Unbekannt') AS birth_date_info
FROM students;
Ergebnis:
| student_id | name | birth_date_info |
|---|---|---|
| 1 | Otto Art | 2000-01-15 |
| 2 | Anna Song | Unbekannt |
| 3 | Alex Lin | 1999-05-10 |
| 4 | Maria Chi | Unbekannt |
Das ist besonders praktisch für Berichte, wo es wichtig ist zu zeigen, dass Daten fehlen.
Praxistipps
Der Umgang mit NULL erfordert besondere Aufmerksamkeit. Hier ein paar nützliche Tipps:
- Nutze
IS NULLundCOALESCE(), um fehlende Werte zu prüfen und zu ersetzen. - Denk dran: Aggregatfunktionen ignorieren
NULL, außerCOUNT(*). - Für die Sortierung: Merke dir die Schlüsselwörter
NULLS FIRSTundNULLS LAST. - Gib in Berichten immer an, wie du
NULLbehandelst, damit es keine Missverständnisse mit Kolleg:innen gibt.
Solches Wissen hilft dir nicht nur, die richtigen Abfragen zu schreiben, sondern macht auch Eindruck im Vorstellungsgespräch. Denn mit echten Daten umgehen zu können, zählt immer mehr als nur Theorie!
GO TO FULL VERSION