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

MySQL COALESCE() explicado


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