TL; DR
Es ist der NULL
sichere 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 0
und 'a' <=> 'a'
Erträge 1
.
Im Gegensatz zum regulären =
Operator haben Werte von NULL
keine besondere Bedeutung und ergeben daher niemals NULL
ein mögliches Ergebnis. also: 'a' <=> NULL
Erträge 0
und NULL <=> NULL
Erträge 1
.
Nützlichkeit
Dies kann nützlich sein, wenn beide Operanden enthalten können NULL
und 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 NULL
ohne 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 NULL
und 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
spaceship
Betreiber