Dies ist in SQL (als logische Sprache) so, weil null unbekannt / undefiniert bedeutet.
In Programmiersprachen (wie zB C ++ oder C #) ist ein Nullzeiger / Verweis jedoch ein bestimmter Wert mit einer bestimmten Bedeutung - nichts.
Zwei Nichtigkeiten sind äquivalent, aber zwei Unbekannte nicht. Die Verwirrung kommt von der Tatsache, dass der gleiche Name (Null) für beide Konzepte verwendet wird.
In VB6 erzeugt der Ausdruck Null = Null
Null
anstatt True
, wie Sie es erwarten würden.
Dies führt zu einem Laufzeitfehler, wenn Sie versuchen, es einem Boolean zuzuordnen, wenn Sie es jedoch verwenden
als Bedingung von " If ... Then
" verhält es sich wie False
. Außerdem wird Null <> Null
auch
produzieren Null
, also:
In VB6 könnte man sagen, dass Null
weder gleich selbst (oder irgendetwas anderes) ist, noch ungleich!
Sie sollten es mit der Funktion IsNull()
testen.
VB6 hat auch andere spezielle Werte:
Nothing
für Objektreferenzen. Nothing = Nothing
ist ein Kompilierungsfehler. (Sie sollten es mit " is
" vergleichen) Missing
für optionale Parameter, die nicht angegeben wurden. Es hat keine wörtliche Darstellung, so dass Sie nicht einmal Missing = Missing
schreiben können. (Der Test ist IsMissing(foo)
) Empty
für nicht initialisierte Variablen. Dieser testet gleich mit sich selbst, obwohl es auch eine Funktion IsEmpty()
. Ich erinnere mich, dass ich ein bißchen angewidert von VB war.
MySQL hat einen null-sicheren Gleichheitsoperator, & lt; = & gt ;, der wahr zurückgibt, wenn beide Seiten gleich sind oder beide Seiten null sind. Siehe MySQL-Dokumente .
In C #, Nullable & lt; bool & gt; hat interessante Eigenschaften in Bezug auf logische Operatoren, aber der Gleichheitsoperator ist der gleiche wie andere Typen in dieser Sprache (d. h. ((bool?) null == (bool?) null) == true).
Um das kurzgeschlossene Verhalten der kurzgeschlossenen logischen Operatoren zu bewahren und die Konsistenz mit den Nicht-kurzgeschlossene logische Operatoren, der Nullable Boolean hat einige interessante Eigenschaften. Zum Beispiel: true || null == Wahr. falsch & amp; & amp; null == false usw. Dies steht in direktem Widerspruch zu anderen dreiwertigen Logiksprachen wie ANSI SQL .
Tags und Links sql ruby language-agnostic oracle vb6