NULL gibt einen Wert an, der unbekannt oder nicht anwendbar ist.
NULL
NULL ist ein Spezialwert, der sich von jedem zulässigen Wert bei einem beliebigen Datentyp unterscheidet. NULL ist jedoch in jedem Datentyp ein zulässiger Wert. Mit NULL werden fehlende oder nicht anwendbare Informationen repräsentiert. Beachten Sie, dass dies zwei getrennte und unterschiedliche Fälle für NULL sind:
Situation | Beschreibung |
---|---|
Fehlend | Das Feld hat einen Wert, dieser Wert ist aber nicht bekannt. |
Nicht anwendbar | Das Feld gilt nicht für diese spezielle Zeile. |
Mit SQL können Spalten mit der Einschränkung NOT NULL erzeugt werden. Das bedeutet, dass diese speziellen Spalten NULL nicht enthalten dürfen.
NULL führt das Konzept der Drei-Werte-Logik in SQL ein. Ein Vergleich von NULL mit einem Wert (einschließlich NULL) mithilfe eines Vergleichsoperators ist UNKNOWN. Die einzige Suchbedingung, die TRUE zurückgibt, ist das Prädikat IS NULL. In SQL werden nur dann Zeilen ausgewählt, wenn die Suchbedingung in der WHERE-Klausel mit TRUE ausgewertet wird. Mit UNKNOWN oder FALSE ausgewertete Zeilen werden nicht ausgewählt.
Die Spaltenraumnutzung für NULL-Werte ist 1 Bit pro Spalte und der Speicherplatz wird mit 8-Bit-Multiplen zugewiesen. Die NULL-Bit-Nutzung wird basierend auf der Anzahl der Spalten in der Tabelle fixiert, die NULL-Werte zulassen.
Mit der IS [ NOT ] Wahrwert-Klausel, in der der Wahrwert entweder TRUE, FALSE oder UNKNOWN ist, können Zeilen ausgewählt werden, die NULL enthalten. Eine Beschreibung dieser Klausel finden Sie unter Suchbedingungen.
In den folgenden Beispielen enthält die Salary-Spalte NULL.
Bedingung | Wahrwert | Ausgewählt? |
---|---|---|
Gehalt = NULL | UNKNOWN | NO |
Gehalt <> NULL | UNKNOWN | NO |
NOT (Gehalt = NULL) | UNKNOWN | NO |
NOT (Gehalt <> NULL) | UNKNOWN | NO |
Gehalt = 1000 | UNKNOWN | NO |
Gehalt IS NULL | TRUE | YES |
Gehalt IS NOT NULL | FALSE | NO |
Gehalt = Ausdruck IS UNKNOWN | TRUE | YES |
Dieselben Regeln werden beim Vergleich von Spalten aus zwei verschiedenen Tabellen angewendet. Deshalb werden beim Verbinden von zwei Tabellen keine Zeilen ausgewählt, in denen eine der verglichenen Spalten NULL enthält.
NULL hat außerdem eine interessante Eigenschaft, wenn der Wert in nummerischen Ausdrücken verwendet wird. Das Ergebnis jedes nummerischen Ausdrucks, in dem NULL vorkommt, ist NULL. Das bedeutet: Wenn NULL zu einer Zahl hinzugefügt wird, ist das Ergebnis NULL - und keine Zahl. Wenn NULL als 0 behandelt werden soll, müssen Sie die Funktion ISNULL( Ausdruck, 0 ) verwenden.
Viele gebräuchliche Fehler beim Formulieren von SQL-Abfragen werden durch das Verhalten von NULL verursacht. Sie müssen diese Problembereiche sorgfältig vermeiden. Eine Beschreibung, wie die Drei-Werte-Logik beim Kombinieren von Suchbedingungen wirkt, finden Sie unter Suchbedingungen.
In Mengenoperationen (UNION, INTERSECT, EXCEPT) und in der DISTINCT-Operation wird NULL anders behandelt als in Suchbedingungen. Zeilen, die NULL enthalten und ansonsten identisch sind, werden für diese Operationen als identisch behandelt.
Wenn z.B. eine Spalte "Redundant" in einer Tabelle T1 für jede Zeile NULL enthält, würde die folgende Anweisung nur eine Zeile zurückgeben:
SELECT DISTINCT redundant FROM T1; |
Verbindung mit der Datenbank ist erforderlich
Keine.
SQL/2003 Kernfunktion.
Sybase Unter bestimmten Umständen behandelt Adaptive Server Enterprise NULL als einen Wert, während dies bei SQL Anywhere nicht der Fall ist. Zeilen einer Spalte c1 zum Beispiel, die NULL sind, werden in SQL Anywhere nicht in die Ergebnisse einer Abfrage mit der folgenden WHERE-Klausel einbezogen, da die Bedingung einen Wert von UNKNOWN hat:
WHERE NOT( C1 = NULL ) |
In Adaptive Server Enterprise wird die Bedingung als TRUE bewertet, und diese Zeilen werden zurückgegeben. Sie sollten aus Kompatibilitätsgründen eher IS NULL an Stelle eines Vergleichsoperators verwenden.
Eindeutige Indizes in SQL Anywhere können Zeilen mit NULL enthalten, die aber sonst identisch sind. Adaptive Server Enterprise lässt solche Einträge in eindeutigen Indizes nicht zu.
Wenn Sie jConnect verwenden, steuert die Option tds_empty_string_is_null, ob leere Zeichenfolgen als NULL-Zeichenfolgen zurückgegeben werden oder als Zeichenfolgen, die nur ein Leerzeichen enthalten.
Weitere Hinweise finden Sie unter tds_empty_string_is_null-Option [Datenbank].
Die folgende INSERT-Anweisung fügt eine NULL in die Spalte "date_returned" (Rückgabedatum) der Tabelle "Borrowed_book" (Geliehene Bücher) ein.
INSERT INTO Borrowed_book ( date_borrowed, date_returned, book ) VALUES ( CURRENT DATE, NULL, '1234' ); |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |