TL; DR
C'est l' opérateur NULLégal sûr .
Comme l' =opérateur régulier , deux valeurs sont comparées et le résultat est soit 0(différent) soit 1(égal); en d'autres termes: 'a' <=> 'b'rendements 0et 'a' <=> 'a'rendements 1.
Contrairement à l' =opérateur régulier , les valeurs de NULLn'ont pas de signification particulière et ne donnent donc jamais NULLde résultat possible; donc: 'a' <=> NULLrendements 0et NULL <=> NULLrendements 1.
Utilité
Cela peut être utile lorsque les deux opérandes peuvent contenir NULLet que vous avez besoin d'un résultat de comparaison cohérent entre deux colonnes.
Un autre cas d'utilisation concerne les instructions préparées, par exemple:
... WHERE col_a <=> ? ...
Ici, l'espace réservé peut être une valeur scalaire ou NULLsans avoir à modifier quoi que ce soit dans la requête.
Opérateurs associés
En outre, <=>il existe également deux autres opérateurs qui peuvent être utilisés pour comparer NULL, à savoir IS NULLet IS NOT NULL; ils font partie de la norme ANSI et sont donc pris en charge sur d'autres bases de données, contrairement à <=>ce qui est spécifique à MySQL.
Vous pouvez les considérer comme des spécialisations de MySQL <=>:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
Sur cette base, votre requête particulière (fragment) peut être convertie en la plus portable:
WHERE p.name IS NULL
Soutien
La norme SQL: 2003 a introduit un prédicat pour cela, qui fonctionne exactement comme l' <=>opérateur de MySQL , sous la forme suivante:
IS [NOT] DISTINCT FROM
Ce qui suit est universellement pris en charge, mais est relativement complexe:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
spaceshipopérateur