Mysql
 sql >> Database >  >> RDS >> Mysql

Spiegazione di MySQL COALESCE()

In MySQL, il COALESCE() l'operatore restituisce il primo valore non NULL nell'elenco o NULL se non sono presenti valori non NULL.

Sintassi

La sintassi è questa:

COALESCE(value,...)

Esempio

Ecco un semplice esempio da dimostrare:

SELECT COALESCE(null, 'Fish', 'Rabbit');

Risultato:

Fish

In questo caso, Fish era il primo valore non NULL, quindi COALESCE() restituito quel valore.

Rabbit era anche un valore non NULL, ma veniva dopo Fish e quindi non è stato restituito.

Quando tutti i valori sono NULL

Se tutti i valori sono NULL , COALESCE() restituisce NULL :

SELECT COALESCE( null, null );

Risultato:

NULL

Espressioni

COALESCE() restituisce il valore corrente della prima espressione che inizialmente non restituisce NULL . Pertanto, se passiamo un'espressione come questa:

SELECT COALESCE( null, 2 * 10 );

Otteniamo questo:

20

Esempio di database

Supponiamo di eseguire la seguente query:

SELECT
  PetName,
  PetType
FROM Pets;

E otteniamo il seguente risultato:

PetName	PetType
------- -------
Meow	Cat
Woof	Dog
Tweet	Bird
Awk	NULL
Moo	Cow
Omph	NULL

Possiamo vedere che due righe hanno valori NULL nella colonna DOB.

Se volessimo sostituire NULL con un altro valore, potremmo modificare la query come segue:

SELECT
  PetName,
  COALESCE(PetType, 'Unknown') AS "PetType"
FROM Pets;

Risultato:

PetName	PetType
------- -------
Meow	Cat
Woof	Dog
Tweet	Bird
Awk	Unknown
Moo	Cow
Omph	Unknown

In questo caso abbiamo sostituito tutti i valori NULL con la stringa Unknown .

Non è necessario che sia una stringa però. Ecco un altro esempio che sostituisce i valori NULL con un numero intero:

SELECT 
  EmployeeName,
  Salary,
  COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;

Risultato:

EmployeeName	Salary	Salary (adjusted)
--------------  ------  -----------------
Homer Einstein	NULL	0
Bart Hawking	100000	100000

Conteggio argomenti non valido

Usando COALESCE() senza alcun argomento genera un errore:

SELECT COALESCE();

Risultato:

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