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 0
et 'a' <=> 'a'
rendements 1
.
Contrairement à l' =
opérateur régulier , les valeurs de NULL
n'ont pas de signification particulière et ne donnent donc jamais NULL
de résultat possible; donc: 'a' <=> NULL
rendements 0
et NULL <=> NULL
rendements 1
.
Utilité
Cela peut être utile lorsque les deux opérandes peuvent contenir NULL
et 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 NULL
sans 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 NULL
et 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
spaceship
opérateur