Ich arbeite an Code, der von einem früheren Entwickler geschrieben wurde, und in einer Abfrage heißt es:
WHERE p.name <=> NULL
Was <=>
bedeutet diese Abfrage? Ist es etwas gleich =
? Oder ist es ein Syntaxfehler?
Es werden jedoch keine Fehler oder Ausnahmen angezeigt. Ich weiß das schon <>
= !=
in MySQL .
mysql
sql
operators
spaceship-operator
zzlalani
quelle
quelle
spaceship
BetreiberAntworten:
TL; DR
Es ist der
NULL
sichere Gleichheitsoperator .Wie beim regulären
=
Operator werden zwei Werte verglichen und das Ergebnis ist entweder0
(nicht gleich) oder1
(gleich). mit anderen Worten:'a' <=> 'b'
Erträge0
und'a' <=> 'a'
Erträge1
.Im Gegensatz zum regulären
=
Operator haben Werte vonNULL
keine besondere Bedeutung und ergeben daher niemalsNULL
ein mögliches Ergebnis. also:'a' <=> NULL
Erträge0
undNULL <=> NULL
Erträge1
.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:
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 kannNULL
, nämlichIS NULL
undIS 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
<=>
:Auf dieser Grundlage kann Ihre spezielle Abfrage (Fragment) in die portablere konvertiert werden:
Unterstützung
Der SQL: 2003-Standard hat hierfür ein Prädikat eingeführt, das genau wie der MySQL-
<=>
Operator in folgender Form funktioniert :Folgendes wird allgemein unterstützt, ist jedoch relativ komplex:
quelle
<=>
ist etwas ein nutzloser Operator? richtig?<=>
nimmt zwei Operanden, währendIS (NOT) NULL
nur einer nimmt; großer Unterschied ... es ist=
in dieser Hinsicht genauso nützlich wie es selbst.IS NULL
undIS NOT NULL
sind im SQL-Standard.<=>
ist eine MySQL-spezifische Erweiterung.is not distinct from
Operator. Neugierig zu wissen, ob MySQL einen Index dafür verwenden kann ...a <=> b
istNOT(a <=> b)
.ist <=>
NULL-safe equal to operator
Dieser Operator führt einen Gleichheitsvergleich wie der Operator = durch, gibt jedoch 1 anstelle von NULL zurück, wenn beide Operanden NULL sind, und 0 anstelle von NULL, wenn ein Operand NULL ist.
Hier finden Sie die Dokumentation
Stichprobe :
Sie sollten IS NOT NULL verwenden. (Die Vergleichsoperatoren = und <> geben beide UNBEKANNT mit NULL auf beiden Seiten des Ausdrucks an.)
kann auch den Null-Safe-Equality-Operator negieren, dies ist jedoch kein Standard-SQL.
quelle
<=>
sollte als Gleichheitsoperator bezeichnet werden und=
ist derNULL
unsichere Gleichheitsoperator.Es ist der NULL-Safe gleich Operator
<=> Der Operator wird verwendet, um NULL-Werte mit den Feldern zu vergleichen. Wenn normal = (gleich) Operatoren geben NULL zurück, wenn einer der Vergleichswerte NULL ist. Mit <=> gibt der Operator true oder false zurück. <=> Operator ist derselbe wie IS NULL.
Aus dem Handbuch: -
Edit: - ( Obwohl sehr spät eine wichtige Seite Notiz hinzufügen zu erwähnen NICHT <=> auch )
Als Randnotiz:-
NICHT <=>
Es gibt noch einen Punkt NOT <=> , mit dem NULL-Werte mit den Feldern verglichen werden. Wenn normal! = Oder <> (nicht gleich) Operatoren geben NULL zurück, wenn einer der Vergleichswerte NULL ist. Wenn NOT auf <=> angewendet wird, gibt der Operator true oder false zurück. NOT auf <=> Operator angewendet ist identisch mit IS NOT NULL.
Beispiel:-
quelle
NOT <=>
ist kein Operator, sondernNOT
wird auf das Ergebnis von angewendetop1 <=> op2
.<!=>
Operator<=>
ist der null-sichere "gleich" -Operator von MySQL. Aus dem Handbuch :quelle
NULL-sicher gleich. Dieser Operator führt einen Gleichheitsvergleich wie der Operator = durch, gibt jedoch 1 anstelle von NULL zurück, wenn beide Operanden NULL sind, und 0 anstelle von NULL, wenn ein Operand NULL ist.
Es Bedeutung:
Wenn Sie einen NULL-Wert mit einem Nicht-NULL-Wert vergleichen, erhalten Sie NULL. Wenn Sie überprüfen möchten, ob ein Wert null ist.
Der Gleichheitsoperator (<=>), der NULL als normalen Wert betrachtet, gibt also 1 (nicht NULL) zurück, wenn beide Werte NULL sind, und 0 (nicht NULL), wenn einer der Werte NULL ist:
z.B
quelle
<=>
ist der NULL-sichere Gleichheitsoperator .a <=> b
ist dasselbe wie schreiben:Und sorry, ich konnte keinen guten Grund finden, diesen Operator anstelle von zu verwenden
AND/OR IS (NOT) NULL
. Ihr Beispiel ist zum BeispielWHERE p.name <=> NULL
dasselbe wieWHERE p.name IS NULL
.quelle
Aus der MySQL-Dokumentation :
Ein Beispiel für die Verwendung des
<=>
Operators wäre:Welches würde zurückkehren:
Ein Beispiel für den regulären
=
Operator wäre:Welches würde zurückkehren:
Der
<=>
Operator ist dem=
Operator sehr ähnlich ,<=>
wird jedoch niemals zurückkehrenNULL
quelle
Es ist der NULL - Safe Equal to Operator. Beschreibung überprüfen .
quelle
quelle