Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O que é este operador <=> no MySQL?

TL;DR


É o NULL seguro igual operador.

Como o = normal operador, dois valores são comparados e o resultado é 0 (diferente) ou 1 (igual); em outras palavras:'a' <=> 'b' produz 0 e 'a' <=> 'a' rende 1 .

Ao contrário do = normal operador, valores de NULL não tem um significado especial e, portanto, nunca produz NULL como resultado possível; então:'a' <=> NULL produz 0 e NULL <=> NULL rende 1 .

Utilidade


Isso pode ser útil quando ambos os operandos podem conter NULL e você precisa de um resultado de comparação consistente entre duas colunas.

Outro caso de uso é com instruções preparadas, por exemplo:
... WHERE col_a <=> ? ...

Aqui, o espaço reservado pode ser um valor escalar ou NULL sem ter que mudar nada na consulta.

Operadores relacionados


Além de <=> há também dois outros operadores que podem ser usados ​​para comparar com NULL , ou seja, IS NULL e IS NOT NULL; eles fazem parte do padrão ANSI e, portanto, são compatíveis com outros bancos de dados, ao contrário de <=> , que é específico do MySQL.

Você pode pensar neles como especializações do <=> do MySQL :
'a' IS NULL     ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)

Com base nisso, sua consulta específica (fragmento) pode ser convertida para a mais portátil:
WHERE p.name IS NULL

Suporte


O padrão SQL:2003 introduziu um predicado para isso, que funciona exatamente como o <=> do MySQL operador, da seguinte forma:
IS [NOT] DISTINCT FROM 

O seguinte é universalmente suportado, mas é relativamente complexo:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 1
     ELSE 0
END = 1