TL;DR
Es ist der NULL
sicher gleich
Betreiber.
Wie das normale =
-Operator werden zwei Werte verglichen und das Ergebnis ist entweder 0
(ungleich) oder 1
(gleich); mit anderen Worten:'a' <=> 'b'
ergibt 0
und 'a' <=> 'a'
ergibt 1
.
Im Gegensatz zum regulären =
Operator, Werte von NULL
haben keine besondere Bedeutung und ergeben daher niemals NULL
als mögliches Ergebnis; also:'a' <=> NULL
ergibt 0
und NULL <=> NULL
ergibt 1
.
Nützlichkeit
Dies kann nützlich sein, wenn beide Operanden NULL
enthalten können und Sie benötigen ein konsistentes Vergleichsergebnis zwischen zwei Spalten.
Ein weiterer Anwendungsfall sind vorbereitete Anweisungen, zum Beispiel:
... WHERE col_a <=> ? ...
Hier kann der Platzhalter entweder ein Skalarwert oder NULL
sein ohne etwas an der Abfrage ändern zu müssen.
Verwandte Operatoren
Außer <=>
Es gibt auch zwei andere Operatoren, die zum Vergleichen mit NULL
verwendet werden können , nämlich IS NULL
und IS NOT NULL
; Sie sind Teil des ANSI-Standards und werden daher im Gegensatz zu <=>
von anderen Datenbanken unterstützt , das MySQL-spezifisch ist.
Sie können sich diese als Spezialisierungen von <=>
von MySQL vorstellen :
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
Auf dieser Grundlage kann Ihre spezielle Abfrage (Fragment) in das tragbarere umgewandelt werden:
WHERE p.name IS NULL
Unterstützung
Der SQL:2003-Standard hat dafür ein Prädikat eingeführt, das genau wie MySQLs <=>
funktioniert Operator in der folgenden Form:
IS [NOT] DISTINCT FROM
Folgendes wird allgemein unterstützt, ist aber relativ komplex:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1