TL; DR
Es ist der NULLsichere Gleichheitsoperator .
Wie beim regulären =Operator werden zwei Werte verglichen und das Ergebnis ist entweder 0(nicht gleich) oder 1(gleich). mit anderen Worten: 'a' <=> 'b'Erträge 0und 'a' <=> 'a'Erträge 1.
Im Gegensatz zum regulären =Operator haben Werte von NULLkeine besondere Bedeutung und ergeben daher niemals NULLein mögliches Ergebnis. also: 'a' <=> NULLErträge 0und NULL <=> NULLErträge 1.
Nützlichkeit
Dies kann nützlich sein, wenn beide Operanden enthalten können NULLund Sie ein konsistentes Vergleichsergebnis zwischen zwei Spalten benötigen.
Ein weiterer Anwendungsfall sind vorbereitete Anweisungen, zum Beispiel:
... WHERE col_a <=> ? ...
Hier kann der Platzhalter entweder ein skalarer Wert sein oder NULLohne dass Änderungen an der Abfrage vorgenommen werden müssen.
Verwandte Betreiber
Daneben <=>gibt es noch zwei andere Operatoren, mit denen verglichen werden kann NULL, nämlich IS NULLund IS NOT NULL; Sie sind Teil des ANSI-Standards und werden daher im Gegensatz zu <=>MySQL-spezifischen Datenbanken in anderen Datenbanken unterstützt .
Sie können sich diese als Spezialisierungen von MySQL vorstellen <=>:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
Auf dieser Grundlage kann Ihre spezielle Abfrage (Fragment) in die portablere konvertiert werden:
WHERE p.name IS NULL
Unterstützung
Der SQL: 2003-Standard hat hierfür ein Prädikat eingeführt, das genau wie der MySQL- <=>Operator in folgender Form funktioniert :
IS [NOT] DISTINCT FROM
Folgendes wird allgemein unterstützt, ist jedoch relativ komplex:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
spaceshipBetreiber