Pracuję nad kodem napisanym przez poprzedniego programistę i w zapytaniu jest napisane:
WHERE p.name <=> NULL
Co <=>
oznacza w tym zapytaniu? Czy to jest coś równego =
? Czy jest to błąd składni?
Ale nie pokazuje żadnych błędów ani wyjątków. Już to wiem <>
= !=
w MySQL .
mysql
sql
operators
spaceship-operator
zzlalani
źródło
źródło
spaceship
operatoraOdpowiedzi:
TL; DR
To
NULL
bezpieczny operator równości .Podobnie jak
=
operator zwykły , porównywane są dwie wartości, a wynik jest albo0
(nierówny) albo1
(równy); innymi słowy:'a' <=> 'b'
plony0
i'a' <=> 'a'
plony1
.W przeciwieństwie do zwykłego
=
operatora, wartościNULL
nie mają specjalnego znaczenia, więc nigdy nie dają wynikuNULL
jako możliwy wynik; a więc:'a' <=> NULL
plony0
iNULL <=> NULL
plony1
.Przydatność
Może to być przydatne, gdy oba operandy mogą zawierać
NULL
i potrzebujesz spójnego wyniku porównania między dwiema kolumnami.Inny przypadek użycia dotyczy przygotowanych instrukcji, na przykład:
Tutaj symbol zastępczy może być wartością skalarną lub
NULL
bez konieczności zmiany czegokolwiek w zapytaniu.Powiązane operatory
Poza tym
<=>
istnieją również dwa inne operatory, których można użyć do porównaniaNULL
, a mianowicieIS NULL
iIS NOT NULL
; są częścią standardu ANSI i dlatego są obsługiwane w innych bazach danych, w przeciwieństwie do tego<=>
, który jest specyficzny dla MySQL.Możesz myśleć o nich jako o specjalizacjach MySQL
<=>
:Na tej podstawie twoje konkretne zapytanie (fragment) można przekonwertować na bardziej przenośne:
Wsparcie
W standardzie SQL: 2003 wprowadzono predykat do tego, który działa dokładnie tak, jak
<=>
operator MySQL , w następującej postaci:Poniższe są powszechnie obsługiwane, ale są stosunkowo złożone:
źródło
<=>
jest trochę bezużyteczny operator? dobrze?<=>
przyjmuje dwa operandy, aIS (NOT) NULL
tylko jeden; duża różnica ... pod tym względem jest tak=
samo przydatna jak ona sama.IS NULL
iIS NOT NULL
są w standardzie SQL.<=>
to rozszerzenie specyficzne dla MySQL.is not distinct from
operator. Ciekawe, czy MySQL może użyć indeksu w tym ...a <=> b
jestNOT(a <=> b)
.jest <=>
NULL-safe equal to operator
Ten operator wykonuje porównanie równości, takie jak operator =, ale zwraca 1 zamiast NULL, jeśli oba operandy mają wartość NULL i 0 zamiast NULL, jeśli jeden operand ma wartość NULL.
Zobacz dokumentację
Próbka:
powinieneś użyć IS NOT NULL. (Operatory porównania = i <> dają UNKNOWN z wartością NULL po obu stronach wyrażenia).
może również negować null safe operator równości, ale nie jest to standardowy SQL.
źródło
<=>
należy nazywać operatorem równości i=
jestNULL
niebezpiecznym operatorem równości.Jest to bezpieczna wartość NULL równa operatorowi
<=> Operator służy do porównywania wartości NULL z polami. Jeśli normal = (równa się) Operatory zwracają NULL, jeśli jedna z wartości porównania jest równa NULL. Z operatorem <=> zwraca prawdę lub fałsz. <=> Operator jest taki sam, jak IS NULL.
Z instrukcji: -
Edycja: - ( Chociaż bardzo późno, by dodać jedną ważną marginesie wspomnieć NIE <=> jak dobrze )
Na marginesie:-
NIE <=>
Jest jeszcze jeden punkt NOT <=>, który służy do porównywania wartości NULL z polami. Jeśli normalny! = Lub <> (nie równa się) Operatory zwracają NULL, jeśli jedna z wartości porównania jest równa NULL. Z NIE zastosowanym do operatora <=> zwraca prawdę lub fałsz. NIE zastosowane do operatora <=> oznacza to samo, co NIE JEST NULL.
Przykład:-
źródło
NOT <=>
nie jest operatorem, jestNOT
stosowany do wynikuop1 <=> op2
.<!=>
operatora<=>
jest operatorem MySQL „równe” bezpiecznym do null. Z instrukcji :źródło
NULL-safe równy. Ten operator wykonuje porównanie równości, takie jak operator =, ale zwraca 1 zamiast NULL, jeśli oba operandy mają wartość NULL i 0 zamiast NULL, jeśli jeden operand ma wartość NULL.
To znaczenie:
Kiedy porównasz wartość NULL z wartością inną niż NULL, otrzymasz NULL. Jeśli chcesz sprawdzić, czy wartość jest null.
Operator równości (<=>), który traktuje NULL jako wartość normalną, więc zwraca 1 (nie NULL), jeśli obie wartości mają wartość NULL i zwraca 0 (nie NULL), jeśli jedna z wartości ma wartość NULL:
na przykład
źródło
<=>
jest operatorem równości bezpiecznym dla wartości NULL .a <=> b
to to samo co pisanie:Przepraszam, nie mogłem znaleźć jednego dobrego powodu, aby użyć tego operatora zamiast
AND/OR IS (NOT) NULL
. Twój przykładWHERE p.name <=> NULL
jest taki sam jakWHERE p.name IS NULL
.źródło
Z dokumentacji MySQL :
Przykład użycia
<=>
operatora to:Który zwróciłby:
Przykładem zwykłego
=
operatora byłoby:Który zwróciłby:
<=>
Operator jest bardzo podobny do=
operatora, chyba<=>
nigdy nie powróciNULL
źródło
Jest to NULL - bezpieczny równy operatorowi. Sprawdź opis .
źródło
źródło