sql >> Base de Datos >  >> RDS >> Mysql

¿Qué es este operador <=> en MySQL?

TL;DR

Es el NULL seguro igual operador.

Como el = regular operador, se comparan dos valores y el resultado es 0 (distinto) o 1 (igual); en otras palabras:'a' <=> 'b' produce 0 y 'a' <=> 'a' produce 1 .

A diferencia del = regular operador, valores de NULL no tiene un significado especial, por lo que nunca produce NULL como un posible resultado; entonces:'a' <=> NULL produce 0 y NULL <=> NULL produce 1 .

Utilidad

Esto puede resultar útil cuando ambos operandos pueden contener NULL y necesita un resultado de comparación consistente entre dos columnas.

Otro caso de uso es con declaraciones preparadas, por ejemplo:

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

Aquí, el marcador de posición puede ser un valor escalar o NULL sin tener que cambiar nada sobre la consulta.

Operadores relacionados

Además de <=> también hay otros dos operadores que se pueden usar para comparar con NULL , a saber, IS NULL y IS NOT NULL; son parte del estándar ANSI y, por lo tanto, son compatibles con otras bases de datos, a diferencia de <=> , que es específico de MySQL.

Puede pensar en ellos como especializaciones de <=> de MySQL :

'a' IS NULL     ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)

En base a esto, su consulta particular (fragmento) se puede convertir a la más portátil:

WHERE p.name IS NULL

Soporte

El estándar SQL:2003 introdujo un predicado para esto, que funciona exactamente como <=> de MySQL operador, de la siguiente forma:

IS [NOT] DISTINCT FROM 

Lo siguiente es compatible universalmente, pero es relativamente complejo:

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 1
     ELSE 0
END = 1