MySQL-Zertifizierung, Kapitel 10.5

Hinweis: Für die Prüfungen zum MySQL Certified Associate wird aus dem Kapitel 10 des MySQL Certification Study Guide nur der Inhalt von 10.5 vorausgesetzt. Daher ist dieses Kapitel relativ kurz.

10.5 NULL Values

NULL-Werte sind ein spezielles Thema für sich. Ein NULL-Wert bedeutet so viel wie „Es existiert kein Wert“ oder „Datensatz nicht vorhanden“. Er unterscheidet sich also von einem leeren String oder der Zahl 0.

# Zwei völlig unterschiedliche Anweisungen
mysql> INSERT INTO tbl01 (name) VALUES (NULL);
mysql> INSERT INTO tbl01 (name) VALUES ('');

Wenn man in einem MySQL-Befehl NULL schreibt, ist es was anderes als 'NULL' oder "NULL". Letztere bezeichnen einen ganz normalen String (Zeichenkette). Es ist aber wiederum egal, ob man null oder NULL schreibt, da dieses SQL-Schlüsselwort nicht case-sensitiv ist, also Groß- und Kleinschreibung ignoriert werden.


Folgende Beispiele sollen die Besonderheiten von NULL-Werten verdeutlichen:

# 1 ist natürlich nicht gleich 2. 
# Ergebnis ist 0, also falsch
mysql> SELECT 1 = 2;
+-------+
| 1 = 2 |
+-------+
| 0 |
+-------+

# Richtig: 1 ist gleich 1.
# Die Aussage ist wahr, daher Ergebnis 1
mysql> SELECT 1 = 1;
+-------+
| 1 = 1 |
+-------+
| 1 |
+-------+

# Unbekannt kann nicht mit Unbekannt verglichen werden
# Ergebnis ist also NULL
mysql> SELECT NULL = NULL;
+-------------+
| NULL = NULL |
+-------------+
| NULL |
+-------------+

# 1 durch 0 zu teilen ist mathematisch inkorrekt
# Das Ergebnis ist NULL
mysql> SELECT 1/0;
+------+
| 1/0 |
+------+
| NULL |
+------+

Um Null-Werte zu finden, kann man mit den Schlüsselwörtern IS NULL oder IS NOT NULL arbeiten:

# Null-Werte finden
mysql> SELECT * FROM tbl01 WHERE name IS NULL;

Und noch ein weiteres Beispiel:


1. Spalte: 0 ist NULL? Nein, 0 ist ein Wert, daher ist das Ergebnis falsch (0)

2. Spalte: 0 ist nicht NULL? Richtig, daher ist das Ergebnis richtig (1)

3. Spalte: Leerer String ist Null? Falsch, auch ein leerer String ist nicht dasselbe wie NULL. Daher ist das Ergebnis falsch.

4. Spalte: Leerer String ist nicht NULL? Richtig!

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+