Cours
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
.
|
|
|
|
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 codeExemple 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 :
|
|
|
|
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 |
|
|
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 ledescription
. - Sinon, vérifiez si la longueur de
product_name
est inférieure à 20. Si c'est le cas, nous affichons le siteproduct_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 :
|
|
|
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) etIFNULL()
(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 queISNULL()
etIFNULL()
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')