Was NULL wirklich bedeutet
Unbekannt, nicht null und nicht leer
Was NULL wirklich bedeutet ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.
NULL kennenlernen
NULL ist die SQL-Angabe für „Ich weiß es nicht“. Es ist weder null noch eine leere Zeichenkette noch false — es steht für das Fehlen eines Werts.
Wenn für eine Spalte kein Wert bekannt ist, speichert die Datenbank dort NULL. Zu verstehen, wie NULL funktioniert, ist einer der wichtigsten Schritte beim Schreiben korrekter Abfragen.
-- A customers table where some phone numbers are unknown
SELECT id, name, phone
FROM customers;
-- id | name | phone
-- ---+---------+------------
-- 1 | Alice | 555-0101
-- 2 | Bob | NULL <- phone unknown
-- 3 | Carol | NULLNULL ist nicht null
Ein häufiger Fehler besteht darin, NULL wie die Zahl 0 zu behandeln. Beides ist völlig verschieden.
0ist ein bekannter Wert: null.NULLbedeutet, dass der Wert fehlt oder unbekannt ist.
Wenn ein Kontostand 0 ist, hat der Kunde kein Geld. Bei NULL ist der Kontostand einfach noch nicht bekannt.
SELECT id, balance
FROM accounts;
-- id | balance
-- ---+--------
-- 1 | 0 <- known: empty wallet
-- 2 | NULL <- unknown: not recorded yetNULL ist keine leere Zeichenkette
Bei Textspalten unterscheiden sich NULL und die leere Zeichenkette '' ebenfalls.
''ist eine Zeichenkette der Länge null — ein bekannter, vorhandener Wert.NULLbedeutet, dass überhaupt keine Zeichenkette angegeben wurde.
Sie können absichtlich eine leere Notiz speichern oder die Notiz vollständig weglassen. SQL unterscheidet diese beiden Fälle.
SELECT id, note, length(note) AS note_len
FROM tickets;
-- id | note | note_len
-- ---+------+----------
-- 1 | '' | 0 <- empty but present
-- 2 | NULL | NULL <- absent; length is also unknownDreiwertige Logik
Die normale Logik kennt zwei Ergebnisse: true und false. SQL fügt ein drittes hinzu: unbekannt.
Jeder Vergleich, an dem NULL beteiligt ist, ergibt unknown, weil Sie keinen Wert vergleichen können, den Sie nicht haben. Dies wird als dreiwertige Logik bezeichnet.
-- Each comparison with NULL returns UNKNOWN, not true/false
SELECT
NULL = 5 AS eq, -- unknown
NULL <> 5 AS neq, -- unknown
NULL = NULL AS self_eq, -- unknown (!)
NULL > 0 AS gt; -- unknownNULL = NULL ist nicht true
Die überraschendste Regel lautet: NULL = NULL ist nicht true. Der Ausdruck ergibt unknown.
Warum? Wenn beide Werte unbekannt sind, können Sie nicht sagen, dass sie gleich sind — sie könnten beliebige Werte haben. Um zu prüfen, ob etwas NULL ist, müssen Sie statt = den Operator IS NULL verwenden.
-- Wrong: never returns rows, because NULL = NULL is unknown
SELECT * FROM customers WHERE phone = NULL;
-- Right: use IS NULL
SELECT * FROM customers WHERE phone IS NULL;WHERE behält nur TRUE-Zeilen
Eine WHERE-Klausel behält eine Zeile nur dann, wenn ihre Bedingung wahr ist. Zeilen, bei denen die Bedingung false oder unknown ergibt, werden verworfen.
Deshalb entfernt das Filtern einer NULL-Spalte mit = stillschweigend Zeilen, die Sie möglicherweise erwarten würden.
-- Bob and Carol have NULL phones, so phone = '555-0101'
-- is UNKNOWN for them and they are excluded.
SELECT name
FROM customers
WHERE phone = '555-0101';
-- Returns only AliceNULL setzt sich in arithmetischen Ausdrücken fort
NULL ist in Ausdrücken ansteckend. Fast jede arithmetische Operation oder Zeichenkettenoperation mit NULL ergibt NULL.
Wenn Sie eine der Eingaben nicht kennen, können Sie auch das Ergebnis nicht kennen.
SELECT
10 + NULL AS sum, -- NULL
100 * NULL AS prod, -- NULL
NULL / 2 AS div, -- NULL
'Hi ' || NULL AS greet; -- NULL (string concat)Woher NULL-Werte kommen
NULL-Werte treten in mehreren häufigen Situationen auf:
- Bei einem
INSERT, der eine nullable Spalte auslässt. - Bei einem Outer Join ohne passende Zeile auf einer Seite.
- Bei einer Aggregation über null Zeilen, etwa wenn
SUMeiner leeren MengeNULLzurückgibt.
Wenn Sie die Ursache kennen, können Sie besser entscheiden, wie Sie mit den Werten umgehen.
-- Omitting phone inserts NULL automatically
INSERT INTO customers (id, name) VALUES (4, 'Dan');
SELECT id, name, phone FROM customers WHERE id = 4;
-- 4 | Dan | NULLNULL verhindern: NOT NULL
Wenn eine Spalte immer einen Wert enthalten soll, deklarieren Sie sie als NOT NULL. Die Datenbank weist dann jede Zeile zurück, die versucht, keinen Wert dafür zu setzen.
So halten Sie Ihre Daten zuverlässig sauber und vermeiden später Überraschungen durch NULL.
CREATE TABLE users (
id integer PRIMARY KEY,
email text NOT NULL, -- must always be provided
bio text -- nullable: optional
);
-- This fails: email cannot be NULL
INSERT INTO users (id, bio) VALUES (1, 'hi');NULL und DISTINCT / GROUP BY
Es gibt eine Stelle, an der SQL NULL-Werte als gleich behandelt: bei der Gruppierung und beim Entfernen von Duplikaten.
In DISTINCT und GROUP BY werden alle NULL-Werte zu einer einzigen Gruppe zusammengefasst, obwohl NULL = NULL an anderen Stellen unknown ergibt. Dieser Sonderfall sorgt dafür, dass Gruppierungen sinnvoll bleiben.
SELECT phone, count(*)
FROM customers
GROUP BY phone;
-- phone | count
-- ---------+------
-- 555-0101 | 1
-- NULL | 2 <- all NULLs grouped togetherZusammenfassung des mentalen Modells
Behalten Sie diese Regeln im Kopf, wann immer Sie NULL sehen:
- NULL bedeutet unbekannt, nicht 0 oder leer.
- Vergleiche mit NULL ergeben unbekannt — verwenden Sie
IS NULL/IS NOT NULL. WHEREbehält nur wahre Zeilen.- Arithmetik mit NULL ergibt NULL.
- Bei der Gruppierung werden NULL-Werte als eine Gruppe behandelt.
-- The two correct NULL tests
SELECT name FROM customers WHERE phone IS NULL;
SELECT name FROM customers WHERE phone IS NOT NULL;Schnellüberprüfung
Welches Ergebnis liefert der Ausdruck NULL = NULL im SQL-Standard?
Zusammenfassung
Sie verstehen jetzt, was NULL wirklich ist: ein Kennzeichen für einen fehlenden oder unbekannten Wert, der sich von 0 und '' unterscheidet.
Sie haben SQLs dreiwertige Logik kennengelernt, erfahren, warum = NULL niemals funktioniert, wie sich NULL in der Arithmetik fortpflanzt und wie WHERE unbekannte Zeilen verwirft. Als Nächstes lernen Sie, wie Sie NULL-Werte mit IS NULL und IS NOT NULL korrekt prüfen.
-- Remember the golden rule
SELECT * FROM customers WHERE phone IS NULL; -- correct
-- SELECT * FROM customers WHERE phone = NULL; -- always empty!Häufig gestellte Fragen
Ist die Lektion „Was NULL wirklich bedeutet“ kostenlos?
Ja — der vollständige Text von „Was NULL wirklich bedeutet“ 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 „Was NULL wirklich bedeutet“?
Unbekannt, nicht null und nicht leer 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 1 von 4.
Wie lange dauert die Lektion „Was NULL wirklich bedeutet“?
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