No MySQL, o
COALESCE()
O operador retorna o primeiro valor não NULL na lista ou NULL se não houver valores não NULL. Sintaxe
A sintaxe fica assim:
COALESCE(value,...)
Exemplo
Aqui está um exemplo simples para demonstrar:
SELECT COALESCE(null, 'Fish', 'Rabbit');
Resultado:
Fish
Neste caso,
Fish
foi o primeiro valor não NULL, então COALESCE()
retornou esse valor. Rabbit
também era um valor não NULL, mas veio depois de Fish
e por isso não foi devolvido. Quando todos os valores são NULL
Se todos os valores forem
NULL
, COALESCE()
retorna NULL
:SELECT COALESCE( null, null );
Resultado:
NULL
Expressões
COALESCE()
retorna o valor atual da primeira expressão que inicialmente não é avaliada como NULL
. Portanto, se passarmos uma expressão como esta:SELECT COALESCE( null, 2 * 10 );
Obtemos isso:
20
Exemplo de banco de dados
Suponha que executemos a seguinte consulta:
SELECT
PetName,
PetType
FROM Pets;
E obtemos o seguinte resultado:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk NULL Moo Cow Omph NULL
Podemos ver que duas linhas têm valores NULL na coluna DOB.
Se quisermos substituir
NULL
com outro valor, poderíamos alterar a consulta da seguinte forma:SELECT
PetName,
COALESCE(PetType, 'Unknown') AS "PetType"
FROM Pets;
Resultado:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk Unknown Moo Cow Omph Unknown
Neste caso, substituímos todos os valores NULL pela string
Unknown
. No entanto, não precisa ser uma string. Aqui está outro exemplo que substitui valores NULL por um inteiro:
SELECT
EmployeeName,
Salary,
COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;
Resultado:
EmployeeName Salary Salary (adjusted) -------------- ------ ----------------- Homer Einstein NULL 0 Bart Hawking 100000 100000
Contagem de argumentos inválida
Usando
COALESCE()
sem nenhum argumento resulta em um erro:SELECT COALESCE();
Resultado:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1