Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Sprachelemente

 

NULL

NULL gibt einen Wert an, der unbekannt oder nicht anwendbar ist.

Syntax
NULL
Bemerkungen

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.

Mengenoperatoren und DISTINCT-Klausel

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;
Berechtigungen

Verbindung mit der Datenbank ist erforderlich

Nebenwirkungen

Keine.

Standards und Kompatibilität
  • 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].

Siehe auch
Beispiel

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' );