TL; DR
É o operador NULL
seguro igual .
Como o =
operador regular , dois valores são comparados e o resultado é 0
(não igual) ou 1
(igual); em outras palavras: 'a' <=> 'b'
rendimentos 0
e 'a' <=> 'a'
rendimentos 1
.
Diferentemente do =
operador regular , os valores de NULL
não têm um significado especial e, portanto, nunca produzem NULL
como um resultado possível; então: 'a' <=> NULL
rendimentos 0
e NULL <=> NULL
rendimentos 1
.
Utilidade
Isso pode ser útil quando os dois operandos podem conter NULL
e você precisa de um resultado consistente de comparação 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 precisar alterar nada sobre a consulta.
Operadores relacionados
Além disso, <=>
existem outros dois operadores que podem ser usados para comparar NULL
, a saber IS NULL
e IS NOT NULL
; eles fazem parte do padrão ANSI e, portanto, são suportados em outros bancos de dados, ao contrário<=>
que é específico do MySQL.
Você pode pensar nelas como especializações 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
Apoio, suporte
O padrão SQL: 2003 introduziu um predicado para isso, que funciona exatamente como o <=>
operador do MySQL , 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
spaceship
operador