sql >> Database >  >> RDS >> Mysql

MySQL COALESCE() uitgelegd

In MySQL is de COALESCE() operator retourneert de eerste niet-NULL-waarde in de lijst, of NULL als er geen niet-NULL-waarden zijn.

Syntaxis

De syntaxis gaat als volgt:

COALESCE(value,...)

Voorbeeld

Hier is een eenvoudig voorbeeld om te demonstreren:

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

Resultaat:

Fish

In dit geval Fish was de eerste niet-NULL-waarde, en dus COALESCE() heeft die waarde geretourneerd.

Rabbit was ook een niet-NULL-waarde, maar kwam na Fish en dus werd het niet teruggestuurd.

Als alle waarden NULL zijn

Als alle waarden NULL zijn , COALESCE() retourneert NULL :

SELECT COALESCE( null, null );

Resultaat:

NULL

Uitdrukkingen

COALESCE() geeft de huidige waarde terug van de eerste uitdrukking die aanvankelijk niet resulteert in NULL . Daarom, als we een uitdrukking als deze doorgeven:

SELECT COALESCE( null, 2 * 10 );

We krijgen dit:

20

Databasevoorbeeld

Stel dat we de volgende query uitvoeren:

SELECT
  PetName,
  PetType
FROM Pets;

En we krijgen het volgende resultaat:

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

We kunnen zien dat twee rijen NULL-waarden hebben in de DOB-kolom.

Als we NULL willen vervangen met een andere waarde, kunnen we de zoekopdracht als volgt wijzigen:

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

Resultaat:

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

In dit geval hebben we alle NULL-waarden vervangen door de tekenreeks Unknown .

Het hoeft echter geen string te zijn. Hier is nog een voorbeeld dat NULL-waarden vervangt door een geheel getal:

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

Resultaat:

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

Ongeldig aantal argumenten

COALESCE() gebruiken zonder argumenten resulteert in een fout:

SELECT COALESCE();

Resultaat:

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

  1. PGEast, Hardware Benchmarking en de PG Performance Farm

  2. Hoe de volgende auto-increment-id in mysql te krijgen

  3. Hoe NIET REGEXP werkt in MySQL

  4. MariaDB Server vergelijken met MariaDB Cluster