TL; DR
To NULLbezpieczny operator równości .
Podobnie jak =operator zwykły , porównywane są dwie wartości, a wynik jest albo 0(nierówny) albo 1(równy); innymi słowy: 'a' <=> 'b'plony 0i 'a' <=> 'a'plony 1.
W przeciwieństwie do zwykłego =operatora, wartości NULLnie mają specjalnego znaczenia, więc nigdy nie dają wyniku NULLjako możliwy wynik; a więc: 'a' <=> NULLplony 0i NULL <=> NULLplony 1.
Przydatność
Może to być przydatne, gdy oba operandy mogą zawierać NULLi potrzebujesz spójnego wyniku porównania między dwiema kolumnami.
Inny przypadek użycia dotyczy przygotowanych instrukcji, na przykład:
... WHERE col_a <=> ? ...
Tutaj symbol zastępczy może być wartością skalarną lub NULLbez 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ównania NULL, a mianowicie IS NULLi IS 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 <=>:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
Na tej podstawie twoje konkretne zapytanie (fragment) można przekonwertować na bardziej przenośne:
WHERE p.name IS NULL
Wsparcie
W standardzie SQL: 2003 wprowadzono predykat do tego, który działa dokładnie tak, jak <=>operator MySQL , w następującej postaci:
IS [NOT] DISTINCT FROM
Poniższe są powszechnie obsługiwane, ale są stosunkowo złożone:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
spaceshipoperatora