SQL-Blog

MariaDB, PostgreSQL, MySQL, … Erfahrungsberichte, Meinungen, …

NULL und seine Eigenheiten

| 2 Kommentare

NULL ist ganz etwas anderes als die Zahl 0 oder ausgeschrieben null.

Diese Behauptung kann man zumindest für Datenbankmanagement-Systeme wie MySQL oder MariaDB aufstellen.

Wofür steht denn jetzt NULL?

NULL könnte man auch als Leerwert bezeichnen. Das heißt wenn wir wollen, dass in einem Datenbankfeld nichts enthalten ist, dann schreiben wir NULL. Jetzt erkennen Sie schon, dass eben NULL ja nicht mit dem Wert 0 verwechselt werden darf, da ja 0 in viele Fällen ein gültiger Inhalt für ein Datenbankfeld wäre. NULL aber explizit angibt, dass in einem Feld kein Wert enthalten ist.

Für die weiteren Erklärungen habe ich wieder eine Testtabelle „testtable“ angelegt. Schon am SQL-Code für das Erstellen der Tabelle können wir erkennen, dass ich für das Feld value auch keine Werte – sprich NULL – Werte zulasse, jedoch definiere ich z.B. das Feld ID als NOT NULL. Ein Feld das einen Primary Key beinhaltet, darf gar nie NULL sein. Schließlich muss mir ja auch das auto_increment garantieren, dass es einen Wert in das Feld schreibt.

CREATE TABLE testtable(
ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(80) NOT NULL,
wert INT NULL
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;

nun füge ich 2 Zeilen in die Tabelle ein. Einmal ohne einem NULL-Wert und einmal mit einem NULL-Wert:

INSERT INTO testtable (ID ,name ,wert)
VALUES ('' , 'ohne NULL', ''),
('' , 'mit NULL', NULL);

Lasse ich mir nun die 2 Zeilen ausgeben so sehe ich schön wie MySQL, oder auch MariaDB die NULL Anweisung verarbeitet:

SELECT * FROM testtable;

Wird kein Wert beim Insert mitgegeben so wandelt MySQL bzw. MariaDB den fehlenden Übergabewert in den Standardwert für dieses Feld um, in diesem Fall die Zahl 0 als Standard für das Integer-Feld. Gebe ich explizit NULL mit an, so steht auch im Datenbankfeld der Leerwert, also NULL.

Auf NULL abfragen

Im Gegensatz zu herkömmlichen Werten kann man NULL nicht mit Feld=NULL abfragen, sondern MySQL bzw. MariaDB stellen uns hierfür eigene Funktionen zur Verfügung:

is NULL

Will man alle Zeilen die einen NULL-Wert enthalten abfragen, so macht man das mit der is NULL Funktion, die wie folgt verwendet wird:

SELECT * FROM testtable WHERE wert is NULL;

is NOT NULL

Das Gegenstück ist quasi die Verneinung von is NULL, also is NOT NULL
SELECT * FROM testtable WHERE wert is NOT NULL;

Was sonst bei NULL noch zu beachten ist

  • Bei Sortierungen, sprich bei ORDER BY Anweisungen wird NULL wie das kleinste Element behandelt. D.h. bei ORDER BY ASC werden die NULL-Werte zuerst angezeigt, bei ORDER BY DESC natürlich am Schluß.
  • Auch bei GROUP BY werden alle NULL-Werte als gleich behandelt und somit gemeinsam gruppiert.
  • Wird einem Feld, das als auto_increment definiert wird ein NULL-Wert übergeben, so wird die NULL-Anweisung ignoriert und der nächste Auto-Increment Wert eingefügt.
  • Bis auf die Funktion COUNT() wird der NULL-Wert von den meisten Funktionen ignoriert. D.h. habe ich in einer Spalte die Werte (5,NULL,2) und ich mache ein SUM() über die Spalte so erhalte ich 7 als Ergebnis.

2 Kommentare

  1. Bitte mal Zeichensatz bzw. header deiner WebSite kontrollieren!
    „¬†Auf NULL abfragen“

    Grüße
    Andreas

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.