Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist dieser Operator <=> in MySQL?

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