Accéder au contenu principal

Comment utiliser la fonction COALESCE() en SQL (avec des exemples)

Apprenez à utiliser la fonction SQL COALESCE() pour gérer les valeurs nulles, combiner des colonnes et nettoyer vos données à l'aide d'exemples concrets et d'astuces.
Actualisé 28 mars 2025  · 5 min de lecture

Lorsque vous travaillez avec des données réelles, les valeurs manquantes sont presque inévitables. Que vous souhaitiez nettoyer des ensembles de données ou fusionner des colonnes, SQL offre une solution simple mais puissante : la fonction COALESCE(). Ce tutoriel vous montrera comment fonctionne COALESCE(), quand l'utiliser et comment l'appliquer à travers des exemples pratiques, le tout en quelques lignes de SQL.

Qu'est-ce que COALESCE() en SQL ?

La fonction COALESCE() de SQL renvoie la première valeur non nulle d'une liste d'expressions. Si toutes les valeurs sont nulles, il renvoie null. Elle est couramment utilisée pour gérer les valeurs manquantes ou pour combiner plusieurs colonnes en une sortie de secours.

Quand devez-vous utiliser COALESCE() ?

Cette fonction est utile pour combiner les valeurs de plusieurs colonnes en une seule.

Par exemple, un tableau appelé utilisateurs contient les valeurs des utilisateurs work_email et personal_email.

En utilisant la fonction COALESCE(), nous pouvons créer une colonne appelée email, qui affiche l'adresse work_email de l'utilisateur si elle n'est pas nulle. Dans le cas contraire, il affiche personal_email.

user_id

work_email

personal_email

COALESCE() de

work_email et

personal_email

1

angel@datacamp.com

nul

angel@datacamp.com

2

nul

bruce@gmail.com

bruce@gmail.com

3

cath@datacamp.com

cath@gmail.com

cath@datacamp.com

Syntaxe de COALESCE()

COALESCE(value_1, value_2, ...., value_n)

La fonction COALESCE() prend en compte au moins une valeur (value_1). Il renvoie la première valeur non nulle de la liste, de gauche à droite.

Par exemple, il vérifiera d'abord si value_1 est nul. Si ce n'est pas le cas, il renvoie value_1. Sinon, il vérifie si value_2 est nul. Le processus se poursuit jusqu'à ce que la liste soit complète. 

COALESCE() peut être utilisé avec des colonnes, des expressions ou des constantes.

Exemples pratiques de COALESCE()

Exécutez et modifiez le code de ce tutoriel en ligne

Exécuter le code

Exemple 1 : Remplacement de null par une constante

Considérez le tableau countries avec une liste de pays et leurs fêtes nationales. Certaines valeurs de la journée nationale sont nulles. COALESCE() remplit les valeurs manquantes dans national_day avec la chaîne de caractères constante 'Unknown'.

SELECT
   country_id,
   name, 
   national_day,
   COALESCE(national_day, 'Unknown') AS national_day_coalesced
FROM countries
ORDER BY country_id

Les résultats sont les suivants :

country_id

name

national_day

national_day_coalesced

1

Aruba

nul

Inconnu

2

Afghanistan

1919-08-19T00:00:00.000Z

1919-08-19

3

Angola

1975-11-11T00:00:00.000Z

1975-11-11

4

Anguilla

1967-05-30T00:00:00.000Z

1967-05-30

Remarquez que la valeur null dans national_day est remplacée par une constante Unknown

Exemple 2 : Choisir entre deux colonnes

Nous disposons d'un tableau nommé products. Il contient le nom du produit et sa description. Certaines descriptions sont trop longues (plus de 60 caractères). Dans ce cas, nous remplaçons la description par le nom du produit.

La requête suivante utilise CASE pour convertir les descriptions longues en NULL, puis utilise COALESCE() pour revenir au nom du produit.

SELECT DISTINCT
   product_name,
   description,
   COALESCE(
      CASE WHEN 
         LENGTH(description) >= 60 
         THEN NULL 
         ELSE description 
         END, 
      product_name) product_name_or_description
FROM products

Les résultats sont les suivants :

product_name

description

product_name_or_description

G.Skill Ripjaws V Series

"Speed:DDR4-3200,Type:288-pin DIMM,CAS:14Module:4x16GBSize:64GB"

G.Skill Ripjaws V Series

G.Skill Ripjaws V Series

"Speed:DDR4-3200,Type:288-pin DIMM,CAS:15Module:4x16GBSize:64GB"

G.Skill Ripjaws V Series

Asus X99-E-10G WS

"CPU:LGA2011-3,Form Factor:SSI CEB,RAM Slots:8,Max RAM:128GB"

"CPU:LGA2011-3,Form Factor:SSI CEB,RAM Slots:8,Max RAM:128GB"

Supermicro X9SRH-7TF

"CPU:LGA2011,Form Factor:ATX,RAM Slots:8,Max RAM:64GB"

"CPU:LGA2011,Form Factor:ATX,RAM Slots:8,Max RAM:64GB"

Remarquez que la colonne product_name_or_description affiche product_name si le description est long. Dans le cas contraire, il affiche le site description.

Exemple 3 : Logique de repli avec plusieurs colonnes

Nous pouvons aller plus loin dans l'exemple 2. Supposons qu'il y ait actuellement deux exigences :

  • Si la longueur du description est inférieure à 60, affichez le description.
  • Sinon, vérifiez si la longueur de product_name est inférieure à 20. Si c'est le cas, nous affichons le site product_name.
  • Dans le cas contraire, l'écran affiche product.
SELECT DISTINCT
   product_name,
   description,
   COALESCE(
      CASE 
         WHEN LENGTH(description) > 50
         THEN NULL
         ELSE description
      END,
   CASE 
      WHEN LENGTH(product_name) > 14
      THEN NULL
      ELSE product_name
   END,
'product') AS product_name_or_description
FROM products
ORDER BY product_name

Les résultats sont les suivants :

product_name

description

product_name_or_description

ADATA ASU800SS-128GT-C

Série:Ultimate SU800,Type:SSD,Capacité:128GB,Cache:N/A

produit

ADATA ASU800SS-512GT-C

Série:Ultimate SU800,Type:SSD,Capacité:512GB,Cache:N/A

produit

AMD 100-5056062

Chipset:Vega Frontier Edition Liquid,Mémoire:16GBCore Clock:1.5GHz

produit

AMD 100-505989

Chipset:FirePro W9100,Mémoire:32GBCore Clock:930MHz

Chipset:FirePro W9100,Mémoire:32GBCore Clock:930MHz

Remarquez que la colonne product_name_or_description affiche soit product_name soit description en fonction de la longueur des colonnes product_name et description.

Moteurs SQL pris en charge

COALESCE() fonctionne avec SQL Server (à partir de 2008), Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse, BigQuery et Amazon RedShift.

Fonctions SQL associées

Réflexions finales

La fonction COALESCE() est un outil polyvalent permettant de gérer les valeurs nulles et de simplifier vos requêtes SQL. Que vous remplaciez des données manquantes par des valeurs par défaut ou que vous combiniez plusieurs colonnes en une seule, COALESCE() vous aide à conserver une logique propre et lisible.

Prêt à approfondir vos compétences en SQL ? Découvrez ces cours adaptés aux débutants et propices à la carrière sur DataCamp :

FAQ

Que se passe-t-il si toutes les valeurs de COALESCE() sont NULL ?

Si chaque argument transmis à la fonction COALESCE() est NULL, la fonction renverra NULL.

Quelle est la différence entre COALESCE() et ISNULL() ou IFNULL() ?

  • ISNULL() (SQL Server) et IFNULL() (MySQL, SQLite) n'acceptent que deux arguments.
  • COALESCE() peut accepter plusieurs arguments et est plus standard dans les dialectes SQL.

  • COALESCE() fait partie de la norme ANSI SQL, tandis que ISNULL() et IFNULL() sont spécifiques à la base de données.

Puis-je utiliser COALESCE() avec des expressions ou des fonctions ?

Oui, vous pouvez utiliser des noms de colonnes, des littéraux, des fonctions ou des expressions à l'intérieur de COALESCE().

COALESCE(LOWER(name), 'unknown')

L'utilisation de COALESCE() a-t-elle un coût en termes de performances ?

En général, no-COALESCE() est efficace. Cependant, si vous l'utilisez avec des expressions complexes ou dans des requêtes volumineuses, la base de données peut évaluer plus d'expressions que nécessaire, en fonction de la façon dont elles sont écrites.

La fonction COALESCE() fonctionne-t-elle avec différents types de données ?

Oui, mais tous les arguments doivent être implicitement convertibles en un type de données commun. Sinon, il peut renvoyer une erreur de conversion de type en fonction de votre moteur SQL.

Puis-je imbriquer des fonctions COALESCE() ?

Oui. Vous pouvez les imbriquer, mais c'est rarement nécessaire car COALESCE() gère déjà les arguments multiples :

COALESCE(col1, COALESCE(col2, 'default'))

Cela équivaut à :

COALESCE(col1, col2, 'default')
Sujets

Cours SQL populaires

Cours

Introduction to SQL

2 h
1.3M
Learn how to create and query relational databases using SQL in just two hours.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow