IS NULL und IS NOT NULL
Fehlende Werte korrekt prüfen
IS NULL und IS NOT NULL ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Fehlende Werte prüfen
Da Vergleiche mit NULL immer unbekannt ergeben, stellt SQL zwei spezielle Operatoren bereit, um fehlende Werte zu prüfen: IS NULL und IS NOT NULL.
Dies sind die einzigen zuverlässigen Möglichkeiten, NULL-Werte zu finden oder auszuschließen. In dieser Lektion lernen Sie, sie korrekt zu verwenden.
-- Rows where phone is missing
SELECT name FROM customers WHERE phone IS NULL;
-- Rows where phone is present
SELECT name FROM customers WHERE phone IS NOT NULL;Warum = NULL fehlschlägt
Es liegt nahe, WHERE phone = NULL zu schreiben, aber dieser Ausdruck findet niemals eine Zeile. Die Bedingung ergibt für jede Zeile unknown, und WHERE behält nur wahre Zeilen.
Das Ergebnis ist eine leere Ergebnismenge — ein stiller Fehler, da keine Fehlermeldung ausgegeben wird.
-- Always returns 0 rows, even if NULLs exist
SELECT * FROM customers WHERE phone = NULL;
-- The fix
SELECT * FROM customers WHERE phone IS NULL;IS NULL in der Praxis
IS NULL ergibt genau dann true, wenn der Wert fehlt, und andernfalls false. Der Operator ergibt niemals unknown.
Damit können Sie ihn überall sicher einsetzen, wo Sie ein eindeutiges Wahrheitsresultat benötigen.
SELECT id, name, (phone IS NULL) AS missing_phone
FROM customers;
-- id | name | missing_phone
-- ---+-------+--------------
-- 1 | Alice | f
-- 2 | Bob | t
-- 3 | Carol | tIS NOT NULL in der Praxis
IS NOT NULL ist genau das Gegenteil: true, wenn der Wert vorhanden ist, und false, wenn er fehlt.
Verwenden Sie den Operator, um nur Zeilen mit tatsächlich vorhandenen Daten zu filtern, etwa Kunden, die Sie anrufen können.
SELECT name, phone
FROM customers
WHERE phone IS NOT NULL;
-- name | phone
-- ------+----------
-- Alice | 555-0101Mit AND / OR kombinieren
Sie können NULL-Prüfungen mit anderen Bedingungen über AND und OR kombinieren.
So können Sie beispielsweise aktive Kunden finden, bei denen noch keine Telefonnummer hinterlegt ist — eine typische Abfrage zur Datenqualität.
SELECT id, name
FROM customers
WHERE is_active = true
AND phone IS NULL;
-- Active customers missing a phone numberNULL in NOT IN: Eine Falle
NOT IN verhält sich problematisch, wenn die Liste ein NULL enthält. Befindet sich ein NULL-Wert in der Menge, kann NOT IN für jede Zeile unknown ergeben und dadurch erwartete Ergebnisse verwerfen.
Verwenden Sie vorzugsweise NOT EXISTS oder filtern Sie NULL-Werte zuerst aus der Unterabfrage heraus.
-- Risky: if blocked_ids contains a NULL, this returns nothing
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM blocked);
-- Safer
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM blocked WHERE user_id IS NOT NULL);IS DISTINCT FROM
PostgreSQL stellt mit IS DISTINCT FROM und IS NOT DISTINCT FROM NULL-sichere Vergleichsoperatoren bereit.
Im Gegensatz zu = behandeln sie zwei NULL-Werte als gleich und einen NULL-Wert im Vergleich zu einem Wert als verschieden. Dabei liefern sie immer true oder false, niemals unknown.
SELECT
NULL IS NOT DISTINCT FROM NULL AS a, -- true: both NULL = same
NULL IS DISTINCT FROM 5 AS b, -- true: NULL differs from 5
5 IS DISTINCT FROM 5 AS c; -- false: same valueZwei nullable Spalten vergleichen
Wenn Sie zwei Spalten vergleichen, die beide NULL sein können, übersieht das einfache = den Fall, dass beide NULL sind. IS NOT DISTINCT FROM behandelt diesen Fall zuverlässig.
Das eignet sich besonders, um unveränderte Zeilen zu finden, auch wenn der Wert unbekannt ist.
-- Rows where old and new phone are 'the same',
-- counting NULL = NULL as same
SELECT id
FROM customer_changes
WHERE old_phone IS NOT DISTINCT FROM new_phone;NULL-Werte zählen
Eine praktische Anwendung von IS NULL ist die Prüfung der Datenqualität: Sie können zählen, in wie vielen Zeilen ein Wert fehlt.
Kombinieren Sie den Operator mit FILTER (PostgreSQL) oder einem CASE innerhalb von COUNT, um NULL- und Nicht-NULL-Werte nebeneinander zu zählen.
SELECT
count(*) AS total,
count(*) FILTER (WHERE phone IS NULL) AS missing,
count(*) FILTER (WHERE phone IS NOT NULL) AS present
FROM customers;NULL-Prüfungen in CHECK-Constraints
Sie können NULL-Prüfungen innerhalb von CHECK-Constraints verwenden, um Regeln wie „Wenn eine Zeile versendet ist, muss sie ein Versanddatum haben“ durchzusetzen.
Beachten Sie: Eine CHECK-Constraint gilt, wenn ihre Bedingung true oder unknown ergibt. Berücksichtigen Sie NULL-Fälle daher sorgfältig.
CREATE TABLE orders (
id integer PRIMARY KEY,
status text NOT NULL,
ship_date date,
CHECK (status <> 'shipped' OR ship_date IS NOT NULL)
);Bewährte Vorgehensweisen
Beachten Sie diese Gewohnheiten, um sicher mit NULL-Werten umzugehen:
- Prüfen Sie immer mit
IS NULL/IS NOT NULL, niemals mit= NULL. - Achten Sie bei nullable Unterabfragen auf
NOT IN. - Verwenden Sie
IS DISTINCT FROMfür NULL-sichere Gleichheitsvergleiche. - Prüfen Sie fehlende Daten mit
count(*) FILTER (...).
-- The reliable toolkit
WHERE col IS NULL
WHERE col IS NOT NULL
WHERE a IS DISTINCT FROM b
WHERE a IS NOT DISTINCT FROM bSchnelltest
Sie möchten alle Kunden, bei denen die Spalte phone keinen Wert enthält. Welche WHERE-Klausel ist korrekt?
Zusammenfassung
Sie haben gelernt, wie Sie mit IS NULL und IS NOT NULL korrekt auf fehlende Werte prüfen und warum = NULL niemals funktioniert.
Außerdem haben Sie die Falle bei NOT IN, den NULL-sicheren Operator IS DISTINCT FROM und die Prüfung auf NULL-Werte mit FILTER kennengelernt. Als Nächstes lernen Sie, NULL-Werte mit sinnvollen Standardwerten durch COALESCE und NULLIF zu ersetzen.
SELECT name FROM customers WHERE phone IS NULL;
SELECT name FROM customers WHERE phone IS NOT NULL;Häufig gestellte Fragen
Ist die Lektion „IS NULL und IS NOT NULL“ kostenlos?
Ja — der vollständige Text von „IS NULL und IS NOT NULL“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „IS NULL und IS NOT NULL“?
Fehlende Werte korrekt prüfen Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „IS NULL und IS NOT NULL“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Was NULL wirklich bedeutet
- IS NULL und IS NOT NULL
- COALESCE und NULLIF
- NULL in Aggregationen und Joins