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
Equal
sein, 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: NULL
s are now "lowest" for SORTS
(NULL
s 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
NULL
s am Anfang des Ergenbisdatensatzes platziert, - für absteigende Sortierungen werden
NULL
s am Ende des Ergensidatensatzes platziert.
Wichtig: In älteren Versionen waren NULL
s 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 >>