Skip to content

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.


L’utilisation du CASE est possible de 2 manières différentes :

  1. Comparer une colonne à un ensemble de valeurs possibles (forme simple).
  2. É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'
END

Dans 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 ELSE est facultative et sert de ramasse-miette. Si aucune condition précédente n’est respectée, c’est la valeur du ELSE qui sera retournée par défaut. Si ELSE est omis et qu’aucune condition n’est satisfaite, le résultat sera NULL.


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'
END

Cette 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'
END

Il 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'
END

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.

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_prix
FROM 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_modifie
FROM 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 offre
FROM 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 ELSE peut parfois être utilisée pour gérer les erreurs (comme dans l’exemple avec WHEN 0 THEN 'Erreur').


CASE peut également être utilisé dans une clause WHERE pour créer des conditions complexes :

SELECT * FROM achat
WHERE CASE
WHEN quantite > 5 THEN prix_unitaire > 10
ELSE prix_unitaire > 5
END;

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.


CASE est très utile pour personnaliser l’ordre de tri :

SELECT nom, surcharge, prix_unitaire, quantite
FROM achat
ORDER BY CASE
WHEN surcharge > 1 THEN 1
WHEN surcharge = 1 THEN 2
ELSE 3
END;

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
);

  • Utilisez des alias (AS nom_alias) pour les colonnes calculées avec CASE afin 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 sera NULL. C’est parfois voulu, mais pas toujours.
  • Indentez votre code : les CASE imbriqués ou longs peuvent devenir difficiles à lire. Une bonne indentation est essentielle.

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