la programmation

Maîtrisez l’Expression CASE en SQL

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 :

sql
SELECT 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 :

  1. Exemple simple : Catégorisation des produits en fonction de leur prix dans une table « Produits ».
sql
SELECT 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 ».

  1. Exemple avancé : Calcul du grade d’un étudiant en fonction de ses notes dans une table « Etudiants ».
sql
SELECT 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 :

  1. Clause WHERE :

    sql
    SELECT 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.

  2. Clause ORDER BY :

    sql
    SELECT 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.

  3. Clause GROUP BY avec agrégation :

    sql
    SELECT 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) :

sql
SELECT 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 :

sql
SELECT 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.

Bouton retour en haut de la page