15. Januar 2008

Noch einige Anmerkungen zum Thema SQL NULL ...

English title: NULL = NULL or NULL IS NULL or what (contd) ...?

Heute noch ein paar Ergänzungen zum Thema NULL. Nachdem der letzte Post das grundsätzliche Verhalten von NULL betrachtet hat, fehlen nur noch ein paar Informationen über das Verhalten von NULL bei AND bzw. OR-Verknüpfungen - auch hier hilft eine Tabelle:
AusdruckErgebnis
(true) and (null)NULL
(false) and (null)false
(true) or (null)true
(false) or (null)NULL
  • Fangen wir mit der ersten AND-Verknüpfung an: Die linke Seite ist mit true bekannt, die rechte Seite ist unbekannt (NULL). Das Endergebnis hängt nun von der rechten Seite ab: Wenn die rechte Seite true wäre, wäre das Ergebnis ebenfalls true, wenn sie false wäre, dann ergäbe sich als Ergebnis false. Beides ist also möglich; die Datenbank weiss es nicht, also kommt NULL heraus.
  • Analog die zweite AND-Verknüpfung: Die linke Seite ist mit false bekannt, die rechte Seite ist unbekannt (NULL). Nun ist es egal, wie die rechte Seite aussieht; wenn bei einer AND-Verknüpfung eine Seite false ist, kommt immer false heraus. Die Datenbank kann also mit Sicherheit sagen, dass false herauskommt.
  • Die OR-Verknüpfungen lassen sich nun ähnlich erklären. OR reagiert mit true genauso wie AND mit false. Hat eine Seite den Wert true, kommt immer true heraus. Die Datenbank kann also mit Sicherheit sagen, dass true herauskommt.
  • Die letzte OR-Verknüpfung mit false erklärt sich wie die erste AND-Verküpfung. Das Ergebnis hängt von der rechten Seite ab; die Datenbank weiss es also nicht; das Ergebnis ist also NULL.
Today a few additional comments about NULL values. The previous post was about SQL NULL basically - this one is about the behaviour when using it in boolean expressions (AND, OR). First we create (again) a value table:
ExpressionResult
(true) and (null)NULL
(false) and (null)false
(true) or (null)true
(false) or (null)NULL
  • We begin with the first AND-Expression: The left side is known (true), die right is unknown (NULL). The result therefore depends on the right side: If the right side was true, the result would be also true, if it was false the result would be also false. Both is possible; the database does not know, the result is therefore NULL.
  • We'll evaluate the second AND-Expression accordingly: The left side is known (false), the right side is - again - unknown (NULL). Now, since this is logical AND the result is always false, regardless of the right side. So the database is sure, that the result is false.
  • The OR expressions are explained the same way: OR evaluates with true as AND with false. If one side is true, the result is always true, regardless of the other side. So the database returns true.
  • The last OR expression with false is explained as the first one with AND. The result depends on the right side; the database does not know - the result is therefore NULL.

1 Kommentar:

Andree hat gesagt…

It's so stupid if one think about it logically like you did and like you wrote. And I always had had a fight with it. Thank you !

Beliebte Postings