Der NULL-Wert in MySQL (Der NULL-Wert in MySQL), Lektion, Seite 722738
https://www.purl.org/stefan_ram/pub/null_mysql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Der NULL-Wert in MySQL 

Der Typ des Nullwertes

Metazahlen

Die ganzen Zahlen werden durch Hinzunahme eines weiteren Wertes NULL zu den ganzen Metazahlen  erweitert.

Die ganzen Zahlen sind also beispielsweise die Werte 0, +1, -1, +2, -2, +3, … .

Die ganzen Metazahlen sind NULL, 0, +1, -1, +2, -2, +3, … . Wir nennen solche Werte, die um NULL erweitert sind, auch Metawerte. Die Zahl 1 gilt demnach als Wert und auch als Metawert, während NULL nur ein Metawert, aber kein Wert ist.

                Metawert
|
.-----------'-----------.
| |
NULL Wert
|
.-----.-----.--'--.-----.-----.-- ...
| | | | | |
0 +1 -1 +2 -2 +3 ...

Dieser Wert NULL ist nicht  mit der Zahl 0 gleichzusetzen, sondern ein anderer Wert.

Metatypen

In SQL  sind als Werte einer Spalte mit dem Datentyp »INTEGER« alle ganzen Metazahlen zulässig, also neben den Werten 0, 1, 2, … auch der Wert NULL.

Auch mit anderen Datentypen als »INTEGER« kann der Wert NULL verwendet werden, der Typ »INTEGER« diente hier nur als ein einführendes Beispiel.

Das NULL-Literal

Das NULL-Literal lautet »NULL«. Der Wert des Ausdrucks »NULL« ist in SQL der Wert NULL.

Der NULL-Wert (Operatoren)

Jeder normale Vergleich mit NULL ergibt NULL, da das Ergebnis als unbekannt gilt, weil NULL einen unbekannten Wert kennzeichnet.

mysql> SELECT NULL=NULL;
+-----------+
| NULL=NULL |
+-----------+
| NULL |
+-----------+
1 row in set (0.08 sec)

Soll geprüft werden, ob ein Wert NULL oder nicht NULL ist, so wird »IS NULL« /ˈɪzˈnəl/ beziehungsweise »IS NOT NULL« /ˈɪzˈnɑtˈnəl/ verwendet.

mysql> SELECT NULL IS NULL;
+--------------+
| NULL IS NULL |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)

mysql> SELECT NULL IS NOT NULL;
+------------------+
| NULL IS NOT NULL |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)

Der Nullwert (Funktionen)

Mit »string ISNULL( variant x, string s )« kann unter MySQL ein Text »s« für den Wert »NULL« festgelegt werden. Das bedeutet: Der Wert dieses Funktionsaufrufs ist im allgemeinen der Wert des ersten Arguments »x«, nur wenn dieses »NULL« ist, dann ist der Wert dieses Funktionsaufrufs der Wert des zweiten Arguments. Eine solche Funktion heißt bei manchen Datenbanken und im SQL-Standard »COALESCE« (Aussprache: /ˌko ə ˈles/ (n), /ˌkoʊəˈlɛs/ (c)).

mysql> SELECT ISNULL( NULL );
+----------------+
| ISNULL( NULL ) |
+----------------+
| 1 |
+----------------+
1 row in set (0.12 sec)

mysql> SELECT ISNULL( ISNULL( NULL ));
+-------------------------+
| ISNULL( ISNULL( NULL )) |
+-------------------------+
| 0 |
+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT IFNULL( NULL, 7 );

PS Auch in MySQL gibt es COALESCE: COALESCE(value[, ...]) erstes Argument, das nicht NULL ist oder NULL. SELECT COALESCE(NULL, 'abc', NULL);

Weitere Aspekte des Metawerts NULL

Nullverbote

Einem Felde können Einschränkungen zugeordnet werden, welche bestimmte Möglichkeiten für dieses Feld ausschließen. Hier wird zunächst nur eine Auswahl der wichtigsten Feldeinschränkungen in vereinfachter Form vorgestellt.

NOT NULL Der Feldeinschränkung »NOT NULL« schließt den Nullwert für ein Feld aus.

MySQL column_definition (vereinfacht)

data_type [NOT NULL | NULL] [AUTO_INCREMENT] [PRIMARY KEY]

CREATE TABLE ABTEILUNG
( ABTEILUNG INTEGER NOT NULL,
NAME VARCHAR( 255 ),
ORT VARCHAR( 255 ),
LEITER INTEGER );

Ein Primärschlüsselfeld darf keine Nullwerte enthalten (dies wird von MySQL unter Umständen stillschweigend ergänzt, so daß es nicht unbedingt ausdrücklich hingeschrieben werden muß).

CREATE TABLE ABTEILUNG
( ABTEILUNG INTEGER NOT NULL AUTO_INCREMENT,
NAME VARCHAR( 255 ),
ORT VARCHAR( 255 ),
LEITER INTEGER
PRIMARY KEY ( ABTEILUNG ));

Fehlwerte

MySQL column_definition (vereinfacht)
    data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY]

IFNULL

IFNULL( expression, value )

IF

IFNULL( expression, value, value1 )

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722738 stefan_ram:722738 Der NULL-Wert in MySQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722738, slrprddef722738, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/null_mysql