TL;DR
C'est le NULL
sûrs et égaux opérateur.
Comme l'ordinaire =
l'opérateur, deux valeurs sont comparées et le résultat est soit 0
(non égal) ou 1
(égal) ; en d'autres termes : 'a' <=> 'b'
donne 0
et 'a' <=> 'a'
donne 1
.
Contrairement à l'ordinaire =
les valeurs de l'opérateur NULL
n'ont pas de signification particulière et ne donnent donc jamais de résultats NULL
comme un résultat possible ; donc : 'a' <=> NULL
donne 0
et NULL <=> NULL
donne 1
.
Utilité
Cela peut s'avérer utile lorsque les deux opérandes peuvent contenir NULL
et vous avez besoin d'un résultat de comparaison cohérent entre deux colonnes.
Un autre cas d'utilisation est celui des déclarations préparées, par exemple :
... WHERE col_a <=> ? ...
Ici, le caractère de remplacement peut être une valeur scalaire ou NULL
sans avoir à modifier quoi que ce soit dans la requête.
Opérateurs connexes
Outre <=>
il existe également deux autres opérateurs qui peuvent être utilisés pour effectuer des comparaisons. NULL
à savoir IS NULL
et IS NOT NULL
; ils font partie de la norme ANSI et sont donc supportés par d'autres bases de données, contrairement à <=>
qui est spécifique à MySQL.
Vous pouvez les considérer comme des spécialisations de l'outil 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 une requête plus portable :
WHERE p.name IS NULL
Soutien
La norme SQL:2003 a introduit un prédicat pour cela, qui fonctionne exactement comme le prédicat MySQL <=>
sous la forme suivante :
IS [NOT] DISTINCT FROM
Ce qui suit est universellement soutenu, mais est relativement complexe :
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
22 votes
Le site
spaceship
opérateur4 votes
@Mhd.Tahawi, Nous besoin de un google qui nous permet de rechercher des opérateurs directement sur google.
1 votes
@Pacerier - J'ai trouvé ceci, il y a environ 5 ans. symbolhound.com (je ne sais pas s'il y a une meilleure alternative)