Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quel est cet opérateur <=> dans MySQL ?

TL;DR

C'est le NULL sûr égal opérateur.

Comme le = normal , deux valeurs sont comparées et le résultat est soit 0 (pas égal) ou 1 (égal); autrement dit :'a' <=> 'b' donne 0 et 'a' <=> 'a' donne 1 .

Contrairement au = normal opérateur, valeurs de NULL n'a pas de signification particulière et ne donne donc jamais NULL comme résultat possible ; donc :'a' <=> NULL donne 0 et NULL <=> NULL donne 1 .

Utilité

Cela peut être 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 concerne les instructions préparées, par exemple :

... WHERE col_a <=> ? ...

Ici, l'espace réservé peut être soit une valeur scalaire, soit NULL sans rien changer à la requête.

Opérateurs associés

Outre <=> il y a aussi deux autres opérateurs qui peuvent être utilisés pour comparer avec 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 à <=> , qui est spécifique à MySQL.

Vous pouvez les considérer comme des spécialisations du <=> 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 une requête plus portable :

WHERE p.name IS NULL

Assistance

Le standard SQL:2003 a introduit un prédicat pour cela, qui fonctionne exactement comme le <=> de MySQL opérateur, 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