NULL

<< NOT NULL | IBExpert Glossar | NUMERIC >>

NULL

NULL wird zur Beschreibung eines Datenfeldes ohne Wert verwendet, d.h. das Feld wurde leer gelassen, weil die Informationen entweder unbekannt oder nicht relevant sind für diesen Datensatz. Der NULL-Wert kann in Text, numerischen und Datum-Datentypen gespeichert werden.

Eine relationale Datenbank kann NULL-Werte als Dateninhalt speichern. Ein NULL-Wert meint nicht die Zahl 0. Beispielsweise kann ein Produkt 0 Verkäufe (0) haben oder eine unbekannt Anzahl Verkäufe (<null>) und nur weil die Telefonnummer eines Kunden nicht bekannt ist (<null>), heißt das nicht, dass der Kunde kein Telefon hat und er hat auch sicherlich nicht die Telefonnummer "0"!

Ein NULL-Wert kommt aus folgenden Gründen vor:

  • Der Wert ist noch nicht bekannt, wird aber zu einem späteren Zeitpunkt ergänzt.
  • Der Wert steht aus irgendeinem Grund noch nicht zur Verfügung, z.B. das Datum des Zahlungseingangs.
  • Der Wert ist nicht wichtig, z.B. das Ablaufdatum einer Kreditkarte von einem Kunden der bar bezahlt hat.

Firebird/InterBase® verwendet keine spezielle Byte-Sequenz, um ein NULL anzuzeigen, aber verwaltet diese Information intern. NULL-Werte können die Abfrageinhalte erheblich beeinflussen, beispielsweise, wenn ein Spaltendurchschnitt berechnet wird. Die mit NULL gefüllten Werte, d.h. leere Felder, werden dabie nicht berücksichtigt. Ein Feld mit dem Wert 0 wird in die Berechnung des Durchschnitts mit einbezogen.

Beispiele aus dem Firebird 1.5 Quick Start Guide:

  • 1 + 2 + 3 + NULL = NULL
  • not (NULL) = NULL
  • 'Home ' || 'sweet ' || NULL = NULL
  • if (a = b) then
    MyVariable = 'Equal';
else
MyVariable = 'Not equal';

Nach Ausführung dieses Codes wird MyVariable nicht Not equal sein, wenn a und b NULL sind. Der Grund dafür ist der Expression(Ausdruck) a = b ergibt NULL, wenn mindestens einer davon NULL ist. In einem if...then Kontext verhält sich NULL wie FALSE. ALso wird der then Block übersprungen und der else Block ausgeführt.

 if (a <> b) then
    MyVariable = 'Not equal';
 else
    MyVariable = 'Equal';

Hier wird MyVariable Equalsein, wenn a NULL ist und b nicht oder umgekehrt. DIe Erklärung ist analog zum vorherigen Beispiel.

 FirstName || ' ' || LastName

wird NULL zurückgeben, wenn entweder FirstName oder LastName NULL ist.

Sehen Sie NULL als UNKNOWN an und alle diese seltsamen Ergebnsise machen plötzlich Sinn! Wenn der Wert von Number unbekannt ist, ist das Ergebnis von 1 + 2 + 3 + Number ebenfalls unbekannt (und daher NULL). Wenn der Inhalt von MyString unbekannt ist , dann ist das auch MyString || YourString (selbst dann, wenn YourString Nicht-NULL ist) und so weiter.

Neu seit Firebird 2.0: NULLs are now "lowest" for SORTS (NULLs sind jetzt das "Niedrigste" für SORTS)

NULL wird jetzt als der niedrigste mögliche Wert zu Sortierzwecken angesehen und Datensätze, in denen NULL erlaubt ist, werden jetzt entsprechend sortiert. Also:

  • für aufsteigende Sortierungen werden NULLs am Anfang des Ergenbisdatensatzes platziert,
  • für absteigende Sortierungen werden NULLs am Ende des Ergensidatensatzes platziert.

Wichtig: In älteren Versionen waren NULLs immer am Ende. Wenn Sie einen Client-Code oder oder eine PSQL Definition haben, die sich auf die NULL-Platzierung von alten Systemen beziehen, ist es notwendig, die Option NULLS LAST in Ihrer ORDER BY Klausel für aufsteigende Werte zu verwenden.

Weitere Infos finden Sie in den Firebird 2.0.4. Release Notes unter Enhancements to NULL logic in Firebird 2.

Siehe auch:
deutschsprachig:
Tabelleneditor
SQL Editor
englischsprachig:
Firebird Null Guide
Division of an integer by an integer
Data types and subtypes
Selecting the right data type to improve database performance
Firebird 2.0 Language Reference Update
SQL Language Reference
Expressions involving NULL
Passing NULL to UDFs in Firebird 2
Database normalization
Firebird 2 Quick Start Guide: Expressions involving NULL

zurück zum Seitenanfang
<< NOT NULL | IBExpert Glossar | NUMERIC >>