CASE WHEN – Conditions SI / SINON
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 6 minutes
Dans le langage SQL, la commande CASE ... WHEN ... permet d’utiliser des conditions de type « si / sinon » (similaire à if / else dans un langage de programmation) pour retourner un résultat parmi plusieurs possibilités. Le CASE peut être utilisé dans n’importe quelle instruction ou clause, telle que SELECT, UPDATE, DELETE, WHERE, ORDER BY ou HAVING.
Syntaxe
Section titled “Syntaxe”L’utilisation du CASE est possible de 2 manières différentes :
- Comparer une colonne à un ensemble de valeurs possibles (forme simple).
- Élaborer une série de conditions booléennes pour déterminer un résultat (forme recherchée).
Forme 1 : Comparer une colonne à un ensemble de valeurs
Section titled “Forme 1 : Comparer une colonne à un ensemble de valeurs”CASE colonne WHEN valeur1 THEN 'résultat1' WHEN valeur2 THEN 'résultat2' WHEN valeur3 THEN 'résultat3' ELSE 'résultat par défaut'ENDDans cet exemple, la valeur contenue dans « colonne » est comparée successivement à valeur1, valeur2, valeur3. Si la condition est vraie, alors la valeur située après le THEN sera retournée.
💡 Bon à savoir : La condition
ELSEest facultative et sert de ramasse-miette. Si aucune condition précédente n’est respectée, c’est la valeur duELSEqui sera retournée par défaut. SiELSEest omis et qu’aucune condition n’est satisfaite, le résultat seraNULL.
Forme 2 : Élaborer une série de conditions booléennes
Section titled “Forme 2 : Élaborer une série de conditions booléennes”CASE WHEN condition1 THEN 'résultat1' WHEN condition2 THEN 'résultat2' ELSE 'résultat par défaut'ENDCette forme est plus flexible car elle permet d’utiliser des conditions complexes avec des opérateurs de comparaison (>, <, <>, AND, OR, etc.).
Exemple :
CASE WHEN a = b THEN 'A égal à B' WHEN a > b THEN 'A supérieur à B' ELSE 'A inférieur à B'ENDIl est possible de reproduire le premier exemple en utilisant cette syntaxe :
CASE WHEN a = 1 THEN 'un' WHEN a = 2 THEN 'deux' WHEN a = 3 THEN 'trois' ELSE 'autre'ENDExemple concret
Section titled “Exemple concret”Pour présenter le CASE dans le langage SQL, imaginons une base de données utilisée par un site de vente en ligne. Dans cette base, il y a une table contenant les achats avec le nom des produits, le prix unitaire, la quantité achetée et une colonne consacrée à une surcharge fictive.
Table « achat »
Section titled “Table « achat »”| id | nom | surcharge | prix_unitaire | quantite |
|---|---|---|---|---|
| 1 | Produit A | 1.3 | 63 | 6 |
| 2 | Produit B | 1.5 | 82 | 8 |
| 3 | Produit C | 0.75 | 7 | 4 |
| 4 | Produit D | 1 | 15 | 2 |
(Note : La colonne « surcharge » représente un coefficient multiplicateur appliqué au prix de base.)
Exemple 1 : Afficher un message personnalisé selon une condition
Section titled “Exemple 1 : Afficher un message personnalisé selon une condition”Il est possible d’effectuer une requête qui affiche un message personnalisé en fonction de la valeur de la surcharge. Le message sera différent selon que la surcharge soit égale à 1, supérieure à 1 ou inférieure à 1.
SELECT id, nom, surcharge, prix_unitaire, quantite, CASE WHEN surcharge = 1 THEN 'Prix ordinaire' WHEN surcharge > 1 THEN 'Prix supérieur à la normale' ELSE 'Prix inférieur à la normale' END AS statut_prixFROM achat;Résultat :
| id | nom | surcharge | prix_unitaire | quantite | statut_prix |
|---|---|---|---|---|---|
| 1 | Produit A | 1.3 | 63 | 6 | Prix supérieur à la normale |
| 2 | Produit B | 1.5 | 82 | 8 | Prix supérieur à la normale |
| 3 | Produit C | 0.75 | 7 | 4 | Prix inférieur à la normale |
| 4 | Produit D | 1 | 15 | 2 | Prix ordinaire |
Exemple 2 : Afficher un prix unitaire différent selon une condition
Section titled “Exemple 2 : Afficher un prix unitaire différent selon une condition”Avec un CASE, il est aussi possible d’utiliser des requêtes plus élaborées. Imaginons maintenant que nous souhaitions multiplier le prix unitaire par 2 si la surcharge est supérieure à 1, le diviser par 2 si la surcharge est inférieure à 1, et laisser le prix unitaire tel quel si la surcharge est égale à 1.
SELECT id, nom, surcharge, prix_unitaire, quantite, CASE WHEN surcharge = 1 THEN prix_unitaire WHEN surcharge > 1 THEN prix_unitaire * 2 ELSE prix_unitaire / 2 END AS prix_modifieFROM achat;Résultat :
| id | nom | surcharge | prix_unitaire | quantite | prix_modifie |
|---|---|---|---|---|---|
| 1 | Produit A | 1.3 | 63 | 6 | 126 |
| 2 | Produit B | 1.5 | 82 | 8 | 164 |
| 3 | Produit C | 0.75 | 7 | 4 | 3.5 |
| 4 | Produit D | 1 | 15 | 2 | 15 |
Exemple 3 : Comparer une colonne à des valeurs spécifiques
Section titled “Exemple 3 : Comparer une colonne à des valeurs spécifiques”Imaginons maintenant que l’application propose des réductions selon le nombre de produits achetés :
- 1 produit acheté → réduction de -5% pour le prochain achat
- 2 produits achetés → réduction de -6% pour le prochain achat
- 3 produits achetés → réduction de -8% pour le prochain achat
- 4 produits ou plus → réduction de -10% pour le prochain achat
Pour effectuer une telle procédure, il est possible de comparer la colonne « quantite » aux différentes valeurs spécifiées et d’afficher un message personnalisé en fonction du résultat.
SELECT id, nom, surcharge, prix_unitaire, quantite, CASE quantite WHEN 0 THEN 'Erreur' WHEN 1 THEN 'Offre de -5% pour le prochain achat' WHEN 2 THEN 'Offre de -6% pour le prochain achat' WHEN 3 THEN 'Offre de -8% pour le prochain achat' ELSE 'Offre de -10% pour le prochain achat' END AS offreFROM achat;Résultat :
| id | nom | surcharge | prix_unitaire | quantite | offre |
|---|---|---|---|---|---|
| 1 | Produit A | 1.3 | 63 | 6 | Offre de -10% pour le prochain achat |
| 2 | Produit B | 1.5 | 82 | 8 | Offre de -10% pour le prochain achat |
| 3 | Produit C | 0.75 | 7 | 4 | Offre de -10% pour le prochain achat |
| 4 | Produit D | 1 | 15 | 2 | Offre de -6% pour le prochain achat |
💡 Astuce : La condition
ELSEpeut parfois être utilisée pour gérer les erreurs (comme dans l’exemple avecWHEN 0 THEN 'Erreur').
Utiliser CASE dans une clause WHERE
Section titled “Utiliser CASE dans une clause WHERE”CASE peut également être utilisé dans une clause WHERE pour créer des conditions complexes :
SELECT * FROM achatWHERE CASE WHEN quantite > 5 THEN prix_unitaire > 10 ELSE prix_unitaire > 5END;Cette requête retourne les produits dont le prix unitaire est supérieur à 10 si la quantité est supérieure à 5, et supérieur à 5 dans le cas contraire.
Utiliser CASE dans ORDER BY
Section titled “Utiliser CASE dans ORDER BY”CASE est très utile pour personnaliser l’ordre de tri :
SELECT nom, surcharge, prix_unitaire, quantiteFROM achatORDER BY CASE WHEN surcharge > 1 THEN 1 WHEN surcharge = 1 THEN 2 ELSE 3END;Ceci permet de trier d’abord les produits dont la surcharge est supérieure à 1, puis ceux égaux à 1, et enfin ceux inférieurs à 1.
Utiliser CASE dans une mise à jour (UPDATE)
Section titled “Utiliser CASE dans une mise à jour (UPDATE)”Il est aussi possible d’utiliser le CASE à la suite de la commande SET d’un UPDATE pour mettre à jour une colonne avec une donnée spécifique selon une règle.
Imaginons par exemple que l’on souhaite offrir un produit pour tous les achats qui ont une surcharge inférieure à 1 et que l’on souhaite retirer un produit pour tous les achats avec une surcharge supérieure à 1 :
UPDATE achat SET quantite = ( CASE WHEN surcharge < 1 THEN quantite + 1 WHEN surcharge > 1 THEN quantite - 1 ELSE quantite END);Bonnes pratiques
Section titled “Bonnes pratiques”- Utilisez des alias (
AS nom_alias) pour les colonnes calculées avecCASEafin de rendre les résultats plus lisibles. - Privilégiez la forme recherchée (avec des conditions booléennes) lorsque vos conditions sont complexes.
- Pensez à
ELSE: si vous ne le spécifiez pas et qu’aucune condition n’est satisfaite, le résultat seraNULL. C’est parfois voulu, mais pas toujours. - Indentez votre code : les
CASEimbriqués ou longs peuvent devenir difficiles à lire. Une bonne indentation est essentielle.
Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment effectuer des traitements conditionnels avec CASE WHEN. Mais comment concaténer les résultats de plusieurs requêtes sans doublons ?
👉 Chapitre 16 : UNION – Concaténer sans doublons
Bonne continuation !
Junior TSAFACK – 08/08/2026