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