Heute machen wir weiter mit NULL – dem unsichtbaren Helden der Datenbanken. Falls du immer noch denkst, dass NULL einfach nur "nichts" ist, hast du zwar recht, aber eben nicht ganz. In dieser Vorlesung lernst du, wie du prüfst, ob in deinen Daten NULL vorkommt und was du damit anfangen kannst. Also, bereit, fehlende Werte aufzuspüren?
Fangen wir easy an – stell dir vor, du arbeitest mit der Datenbank eines Online-Shops. Du hast eine Tabelle mit Bestellungen, bei manchen fehlt der Kommentar, bei anderen steht was drin. Wenn du jetzt alle Bestellungen mit leeren Kommentaren suchst und einfach = oder <> benutzt, wirst du überrascht sein... Warum? Weil NULL ein Spezialfall ist!
In SQL prüfst du auf das Vorhandensein oder Fehlen von NULL mit IS NULL und IS NOT NULL. Diese Operatoren helfen dir, mit NULL klarzukommen und die richtigen Daten zu bekommen.
Werte prüfen mit IS NULL
IS NULL wird genutzt, um zu checken, ob eine Spalte oder ein Ausdruck den Wert NULL hat.
SELECT *
FROM orders
WHERE comment IS NULL;
Diese Abfrage gibt dir alle Zeilen zurück, wo der Wert in der Spalte comment NULL ist. Praktisch, wenn du Bestellungen ohne Kommentar finden willst.
Hier ein Beispiel für die Tabelle orders:
| id | customer_name | total_amount | comment |
|---|---|---|---|
| 1 | Otto Art | 1500 | "Eilige Lieferung" |
| 2 | Maria Chi | 3000 | NULL |
| 3 | Alex Lin | 2000 | '' |
| 4 | Anna Song | 5000 | NULL |
Abfrage:
SELECT id, customer_name
FROM orders
WHERE comment IS NULL;
Ergebnis:
| id | customer_name |
|---|---|
| 2 | Maria Chi |
| 4 | Anna Song |
Beachte: Zeilen mit leerem String '' sind hier nicht dabei, denn '' ist nicht NULL.
Werte prüfen mit IS NOT NULL
IS NOT NULL macht das Gegenteil: Es prüft, ob ein Wert nicht NULL ist. Zum Beispiel, wenn du alle Bestellungen mit Kommentar willst:
SELECT *
FROM orders
WHERE comment IS NOT NULL;
Diese Abfrage gibt dir nur die Zeilen, wo in comment was drinsteht (auch leere Strings '' zählen dazu).
Beispiel
Die Tabelle orders bleibt gleich.
| id | customer_name | total_amount | comment |
|---|---|---|---|
| 1 | Otto Art | 1500 | "Eilige Lieferung" |
| 2 | Maria Chi | 3000 | NULL |
| 3 | Alex Lin | 2000 | '' |
| 4 | Anna Song | 5000 | NULL |
Wir führen die Abfrage aus:
SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;
Ergebnis:
| id | customer_name | comment |
|---|---|---|
| 1 | Otto Art | "Eilige Lieferung" |
| 3 | Alex Lin | '' |
Schau: Die Zeile mit leerem String '' ist dabei. SQL sieht das als "nicht leer" an.
Wann benutzt man IS NULL und IS NOT NULL?
Hier ein paar typische Szenarien:
- Daten filtern: Du willst unvollständige Einträge rauswerfen, wo Werte fehlen.
- Fehlerbehandlung: Manchmal bedeutet
NULLeinen Eingabefehler, und du willst solche Zeilen isolieren. - Datenanalyse: Die Anzahl der Einträge mit fehlenden Werten hilft dir, die Datenqualität zu checken.
Praxisbeispiele
Probieren wir ein paar praktische Aufgaben:
Aufgabe 1: Studenten ohne Geburtsdatum auswählen
Angenommen, du hast die Tabelle students:
| id | name | birth_date |
|---|---|---|
| 1 | Otto Art | 2000-05-10 |
| 2 | Maria Chi | NULL |
| 3 | Alex Lin | 1998-12-30 |
| 4 | Anna Song | NULL |
Abfrage:
SELECT name
FROM students
WHERE birth_date IS NULL;
Ergebnis:
| name |
|---|
| Maria Chi |
| Anna Song |
Mit dieser Abfrage findest du Studenten, bei denen das Geburtsdatum noch fehlt.
Aufgabe 2: Bestellungen mit Kommentaren auswählen
| id | customer_name | total_amount | comment |
|---|---|---|---|
| 1 | Otto Art | 1500 | "Eilige Lieferung" |
| 2 | Maria Chi | 3000 | NULL |
| 3 | Alex Lin | 2000 | '' |
| 4 | Anna Song | 5000 | NULL |
Für die Tabelle orders kannst du Bestellungen mit ausgefülltem Kommentar so finden:
SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;
Ergebnis:
| customer_name | comment |
|---|---|
| Otto Art | "Eilige Lieferung" |
| Alex Lin | '' |
Vergleich mit normalen Operatoren
Jetzt machen wir mal einen "falschen" Versuch, um NULL zu prüfen:
SELECT *
FROM orders
WHERE comment = NULL;
Überrascht? Die Abfrage gibt dir keine Zeile zurück, selbst wenn comment eindeutig NULL ist. Das liegt daran, dass du NULL nicht mit Standard-Operatoren vergleichen kannst. Für solche Checks musst du IS NULL verwenden.
GO TO FULL VERSION