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