sql >> Base de Datos >  >> RDS >> Mysql

MySQL COALESCE () explicado

En MySQL, el COALESCE() operador devuelve el primer valor no NULL en la lista, o NULL si no hay valores no NULL.

Sintaxis

La sintaxis es así:

COALESCE(value,...)

Ejemplo

Aquí hay un ejemplo simple para demostrarlo:

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

Resultado:

Fish

En este caso, Fish fue el primer valor no NULL, por lo que COALESCE() devolvió ese valor.

Rabbit también era un valor no NULL, pero venía después de Fish por lo que no fue devuelto.

Cuando todos los valores son NULL

Si todos los valores son NULL , COALESCE() devuelve NULL :

SELECT COALESCE( null, null );

Resultado:

NULL

Expresiones

COALESCE() devuelve el valor actual de la primera expresión que inicialmente no se evalúa como NULL . Por lo tanto, si pasamos una expresión como esta:

SELECT COALESCE( null, 2 * 10 );

Obtenemos esto:

20

Ejemplo de base de datos

Supongamos que ejecutamos la siguiente consulta:

SELECT
  PetName,
  PetType
FROM Pets;

Y obtenemos el siguiente resultado:

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

Podemos ver que dos filas tienen valores NULL en la columna DOB.

Si quisiéramos reemplazar NULL con otro valor, podríamos cambiar la consulta de la siguiente manera:

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

Resultado:

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

En este caso reemplazamos todos los valores NULL con la cadena Unknown .

Sin embargo, no es necesario que sea una cadena. Aquí hay otro ejemplo que reemplaza los valores NULL con un número entero:

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

Resultado:

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

Recuento de argumentos no válidos

Usando COALESCE() sin ningún argumento da como resultado un error:

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