L’exécution de directives conditionnelles via l’expression CASE dans SQL est une compétence fondamentale pour manipuler et transformer les données de manière dynamique. Le terme « CASE » fait référence à une construction de langage SQL qui permet d’effectuer des actions conditionnelles, similaire à une structure « si… alors… sinon » que l’on retrouve dans d’autres langages de programmation. Cela permet aux utilisateurs de SQL de prendre des décisions basées sur des conditions spécifiques et d’effectuer des actions en conséquence.
L’expression CASE peut être utilisée dans différentes clauses SQL, notamment dans les instructions SELECT, WHERE, ORDER BY, et même dans les clauses GROUP BY et HAVING dans certains systèmes de gestion de bases de données (SGBD) comme MySQL, PostgreSQL, SQL Server, Oracle, etc.

Voici une syntaxe de base pour l’expression CASE dans une instruction SELECT :
sqlSELECT
CASE
WHEN condition1 THEN résultat1
WHEN condition2 THEN résultat2
ELSE résultat_par_défaut
END AS alias_resultat
FROM
nom_table;
Explorons plus en détail chaque composant de cette syntaxe :
- « CASE » marque le début de l’expression CASE.
- « WHEN » introduit une condition spécifique à évaluer.
- Chaque « WHEN » est suivi d’une condition. Si cette condition est vraie, l’action spécifiée après « THEN » est exécutée.
- L’expression « ELSE » est facultative. Elle spécifie l’action à effectuer si aucune des conditions « WHEN » n’est vraie.
- « END » marque la fin de l’expression CASE.
- « AS alias_resultat » est également facultatif. Il permet de donner un alias au résultat obtenu à partir de l’expression CASE.
Voyons maintenant quelques exemples concrets pour mieux comprendre l’utilisation de l’expression CASE :
- Exemple simple : Catégorisation des produits en fonction de leur prix dans une table « Produits ».
sqlSELECT
NomProduit,
Prix,
CASE
WHEN Prix < 50 THEN 'Abordable'
WHEN Prix >= 50 AND Prix < 100 THEN 'Moyen de gamme'
ELSE 'Haut de gamme'
END AS CategoriePrix
FROM
Produits;
Dans cet exemple, nous utilisons l’expression CASE pour catégoriser les produits en fonction de leur prix en trois catégories : « Abordable », « Moyen de gamme » et « Haut de gamme ».
- Exemple avancé : Calcul du grade d’un étudiant en fonction de ses notes dans une table « Etudiants ».
sqlSELECT
Nom,
Note,
CASE
WHEN Note >= 90 THEN 'A'
WHEN Note >= 80 THEN 'B'
WHEN Note >= 70 THEN 'C'
WHEN Note >= 60 THEN 'D'
ELSE 'F'
END AS Grade
FROM
Etudiants;
Dans ce cas, nous utilisons l’expression CASE pour attribuer un grade à chaque étudiant en fonction de sa note, en utilisant une échelle de notation standard (A, B, C, D, F).
En résumé, l’expression CASE est un outil puissant dans SQL pour effectuer des opérations conditionnelles sur les données. Elle permet aux utilisateurs de manipuler et de transformer les résultats de leurs requêtes en fonction de conditions spécifiques, offrant ainsi une flexibilité accrue dans la manipulation des données.
Plus de connaissances
Bien sûr, plongeons plus profondément dans l’utilisation avancée de l’expression CASE en SQL.
Utilisation de CASE dans d’autres clauses SQL :
-
Clause WHERE :
sqlSELECT Nom, Type, Prix FROM Produits WHERE CASE WHEN Type = 'Fruit' THEN Prix * 0.9 WHEN Type = 'Légume' THEN Prix * 0.8 ELSE Prix END < 50;
Dans cet exemple, nous utilisons l’expression CASE dans la clause WHERE pour appliquer des réductions différentes en fonction du type de produit et sélectionner uniquement les produits dont le prix réduit est inférieur à 50.
-
Clause ORDER BY :
sqlSELECT Nom, Quantite FROM Stock ORDER BY CASE WHEN Quantite < 10 THEN 1 WHEN Quantite >= 10 AND Quantite < 50 THEN 2 ELSE 3 END;
Ici, nous utilisons CASE dans la clause ORDER BY pour trier les résultats en fonction de la quantité de stock disponible, plaçant d’abord les produits avec une faible quantité en haut de la liste.
-
Clause GROUP BY avec agrégation :
sqlSELECT Type, COUNT(*) AS NombreProduits, SUM(Prix) AS TotalPrix FROM Produits GROUP BY CASE WHEN Prix < 50 THEN 'Abordable' WHEN Prix >= 50 AND Prix < 100 THEN 'Moyen de gamme' ELSE 'Haut de gamme' END;
Dans cet exemple, nous utilisons CASE dans la clause GROUP BY pour regrouper les produits par catégorie de prix et effectuer des agrégations telles que le comptage du nombre de produits et le calcul du total des prix pour chaque catégorie.
Utilisation de CASE imbriquée (CASE dans CASE) :
sqlSELECT
Nom,
Prix,
CASE
WHEN Type = 'Fruit' THEN
CASE
WHEN Prix < 5 THEN 'Bon marché'
ELSE 'Normal'
END
WHEN Type = 'Légume' THEN
CASE
WHEN Prix < 3 THEN 'Bon marché'
ELSE 'Normal'
END
ELSE 'Non spécifié'
END AS CategoriePrix
FROM
Produits;
Dans cet exemple, nous utilisons CASE de manière imbriquée pour catégoriser les produits non seulement en fonction de leur type mais aussi en fonction de leur prix, en les classant comme « Bon marché » ou « Normal » en fonction de seuils spécifiques pour chaque type.
Utilisation de CASE avec des fonctions agrégées :
sqlSELECT
Type,
AVG(
CASE
WHEN Prix < 50 THEN Prix
ELSE NULL
END
) AS PrixMoyenAbordable,
AVG(
CASE
WHEN Prix >= 50 AND Prix < 100 THEN Prix
ELSE NULL
END
) AS PrixMoyenMoyenDeGamme,
AVG(
CASE
WHEN Prix >= 100 THEN Prix
ELSE NULL
END
) AS PrixMoyenHautDeGamme
FROM
Produits
GROUP BY
Type;
Dans cet exemple, nous utilisons CASE avec des fonctions agrégées (AVG) pour calculer les prix moyens des produits dans différentes gammes de prix, regroupés par type de produit.
Conclusion :
L’utilisation de l’expression CASE dans SQL offre une flexibilité considérable pour traiter les données de manière conditionnelle, que ce soit pour la sélection, le tri, le regroupement ou même le calcul de valeurs agrégées. Cette fonctionnalité est essentielle pour effectuer des opérations avancées sur les données dans les bases de données relationnelles, permettant aux utilisateurs de répondre à une grande variété de besoins en matière de requêtes et de transformations de données.