TL;DR
Je to NULL
bezpečný rovný
operátor.
Jako normální =
operátorem, jsou porovnány dvě hodnoty a výsledkem je buď 0
(nerovná se) nebo 1
(rovnat se); jinými slovy:'a' <=> 'b'
dává 0
a 'a' <=> 'a'
dává 1
.
Na rozdíl od běžného =
operátor, hodnoty NULL
nemají zvláštní význam, a proto nikdy neposkytne NULL
jako možný výsledek; takže:'a' <=> NULL
dává 0
a NULL <=> NULL
dává 1
.
Užitečnost
To může být užitečné, když oba operandy mohou obsahovat NULL
a potřebujete konzistentní výsledek porovnání mezi dvěma sloupci.
Dalším případem použití jsou připravené příkazy, například:
... WHERE col_a <=> ? ...
Zde může být zástupným symbolem buď skalární hodnota, nebo NULL
aniž byste museli na dotazu cokoliv měnit.
Související operátoři
Kromě <=>
existují také dva další operátory, které lze použít k porovnání s NULL
, konkrétně IS NULL
a IS NOT NULL
; jsou součástí standardu ANSI, a proto jsou na rozdíl od <=>
podporovány v jiných databázích , který je specifický pro MySQL.
Můžete si je představit jako specializace <=>
MySQL :
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
Na základě toho může být váš konkrétní dotaz (fragment) převeden na přenosnější:
WHERE p.name IS NULL
Podpora
Standard SQL:2003 pro to zavedl predikát, který funguje přesně jako <=>
MySQL operátora v následujícím tvaru:
IS [NOT] DISTINCT FROM
Následující je všeobecně podporováno, ale je relativně složité:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1