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. Diese speziellen Spalten dürfen nicht NULL enthalten.
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 ] truth-value-Klausel, in der der truth-value entweder TRUE, FALSE oder UNKNOWN ist, können Zeilen ausgewählt werden, die NULL enthalten.
In den folgenden Beispielen enthält die Salary-Spalte NULL.
Bedingung | Wahrwert | Ausgewählt? |
---|---|---|
Salary = NULL | UNKNOWN | NO |
Salary <> NULL | UNKNOWN | NO |
NOT (Salary = NULL) | UNKNOWN | NO |
NOT (Salary <> NULL) | UNKNOWN | NO |
Salary = 1000 | UNKNOWN | NO |
Salary IS NULL | TRUE | YES |
Salary IS NOT NULL | FALSE | NO |
Salary = expression 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 den Wert 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. Wenn NULL zu einer Zahl hinzugefügt wird, ist das Ergebnis NULL und keine Zahl. Wenn NULL als 0 behandelt werden soll, verwenden Sie die Funktion ISNULL( expression, 0 ).
Viele gebräuchliche Fehler beim Formulieren von SQL-Abfragen werden durch das Verhalten von NULL verursacht. Sie müssen diese Problembereiche sorgfältig vermeiden.
In SQL liefern Vergleiche mit NULL innerhalb von Suchbedingungen das Ergebnis UNKNOWN. Bei der Feststellung, ob zwei Zeilen Duplikate voneinander sind, behandelt SQL jedoch NULL als gleichbedeutend mit NULL. Diese Semantik gilt für die Mengenoperatoren (UNION, INTERSECT, EXCEPT) sowie für GROUP BY, PARTITION innerhalb einer WINDOW-Klausel und SELECT DISTINCT.
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/2008 Kernfunktion.
Transact-SQL Unter bestimmten Umständen behandelt Adaptive Server Enterprise Vergleiche mit NULL-Werten anders. Wenn ein expression unter Verwendung von Gleichheit und Ungleichheit mit einer Variablen oder einem NULL-Literal verglichen wird und es sich bei dem expression um einen einfachen Ausdruck handelt, der sich auf die Spalte einer Basistabelle oder Ansicht bezieht, wird der Vergleich mithilfe einer zweiwertigen Logik durchgeführt, wobei NULL = NULL das Ergebnis TRUE liefert statt UNKNOWN. Die folgende Liste enthält die möglichen Vergleiche mit dieser Semantik und die dazugehörigen SQL/2008-Entsprechungen:
Transact-SQL-Vergleich | SQL/2008-Entsprechung |
---|---|
expression = NULL | expression IS NULL |
expression != NULL | NOT (expression IS NULL) |
expression = variable | expression = variable IS TRUE OR (expression IS NULL AND variable IS NULL) |
expression != variable | expression != variable IS TRUE AND (NOT expression IS NULL OR NOT variable IS NULL) |
SQL Anywhere implementiert diese Semantik zum Angleichen des Verhaltens von Adaptive Server Enterprise, wenn die Option ansinull auf OFF gesetzt ist. Die Option ansinull ist für Open Client-und jConnect-Verbindungen standardmäßig auf OFF gesetzt. Um die SQL/2008-Semantik zu gewährleisten, können Sie entweder die Option ansinull auf ON zurücksetzen oder statt eines Gleichheitsvergleichs ein IS [NOT] NULL-Prädikat 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.
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.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |