Instruction CASE en SQL : logique conditionnelle dans vos requêtes
Published: 2026-02-11
L’instruction CASE est la façon dont SQL ajoute de la logique conditionnelle à vos requêtes. Elle fonctionne comme une structure if-then-else, vous permettant de renvoyer différentes valeurs selon les conditions. CASE est prise en charge par toutes les principales bases de données SQL, notamment SQLite, PostgreSQL, MySQL, SQL Server et Oracle.
Données d’exemple
Nous utilisons deux tables dans tous les exemples :
Table products :
| id | name | category | price | stock | rating |
|---|---|---|---|---|---|
| 1 | Laptop Pro | Electronics | 1299.99 | 15 | 4.5 |
| 2 | Wireless Mouse | Electronics | 29.99 | 50 | 4.2 |
| 3 | Office Chair | Furniture | 249.99 | 8 | 4.7 |
| 4 | Desk Lamp | Furniture | 39.99 | 25 | 3.9 |
| 5 | Notebook Pack | Stationery | 12.99 | 100 | 4.0 |
| 6 | Pen Set | Stationery | 8.99 | 75 | 3.5 |
| 7 | Monitor 27" | Electronics | 399.99 | 0 | 4.6 |
| 8 | Standing Desk | Furniture | 599.99 | 3 | 4.8 |
Table orders :
| id | product_id | quantity | order_date | status |
|---|---|---|---|---|
| 1 | 1 | 2 | 2026-02-01 | delivered |
| 2 | 2 | 5 | 2026-02-03 | shipped |
| 3 | 3 | 1 | 2026-02-05 | processing |
| 4 | 4 | 3 | 2026-02-06 | delivered |
| 5 | 5 | 10 | 2026-02-07 | shipped |
| 6 | 1 | 1 | 2026-02-08 | cancelled |
| 7 | 7 | 1 | 2026-02-09 | pending |
| 8 | 8 | 1 | 2026-02-10 | processing |
Expression CASE simple
L’expression CASE simple compare une colonne ou une expression à des valeurs spécifiques. Elle est concise lorsqu’il s’agit de vérifier des égalités.
Syntaxe
CASE column_name
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
Exemple : catégoriser le statut des commandes
Traduire les codes de statut de commande en libellés conviviaux :
Expression CASE recherchée
L’expression CASE recherchée évalue des conditions booléennes, ce qui permet des comparaisons complexes et des intervalles.
Syntaxe
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END
Exemple : catégories de prix
Classer les produits par tranche de prix :
Exemple : statut de disponibilité du stock
Déterminer le statut des stocks avec différents seuils :
Utiliser CASE dans les calculs
Les instructions CASE peuvent modifier des calculs, appliquer des formules conditionnelles ou gérer les valeurs NULL.
Exemple : appliquer des remises selon la catégorie
Calculer des remises en fonction de la catégorie de produit :
Exemple : prioriser les commandes selon la valeur et le statut
Calculer la priorité des commandes en fonction de plusieurs facteurs :
CASE dans les agrégations
Utilisez CASE à l’intérieur des fonctions d’agrégation pour créer des rapports de type tableau croisé ou des comptages conditionnels.
Exemple : compter les produits par disponibilité
Compter combien de produits se trouvent dans chaque catégorie de stock :
Exemple : chiffre d’affaires par catégorie et statut
Calculer différents indicateurs à l’aide d’agrégations conditionnelles :
CASE dans ORDER BY
Utilisez CASE dans ORDER BY pour créer une logique de tri personnalisée.
Exemple : ordre de tri personnalisé
Trier les produits avec une priorité personnalisée (rupture de stock d’abord, puis par note) :
Instructions CASE imbriquées
Les expressions CASE peuvent être imbriquées pour une logique plus complexe.
Exemple : classification complexe des produits
Combiner plusieurs critères pour une catégorisation détaillée :
Cas d’usage courants des instructions CASE
- Catégorisation des données — Regrouper des valeurs en intervalles ou catégories
- Mise en forme conditionnelle — Afficher des libellés conviviaux ou des indicateurs de statut
- Calculs dynamiques — Appliquer différentes formules selon les conditions
- Création de tableaux croisés — Combiner avec des agrégations pour des rapports croisés
- Tri personnalisé — Définir des ordres de tri spécifiques pour une logique métier particulière
- Gestion des valeurs NULL — Remplacer ou signaler les données manquantes
- Décisions multi‑critères — Implémenter des règles métier complexes en SQL
CASE vs. IIF et COALESCE
- CASE — Le plus flexible, gère plusieurs conditions
- IIF(condition, true_value, false_value) — Syntaxe plus simple pour une seule condition (SQL Server, Access)
- COALESCE(val1, val2, …) — Renvoie la première valeur non NULL (pratique pour gérer les NULL)
SQLite prend en charge CASE et COALESCE, mais pas IIF. Utilisez CASE pour une compatibilité maximale.
Conseils de performance
- Ordonnez judicieusement les conditions — Placez d’abord les conditions les plus probables
- Évitez les évaluations redondantes — CASE est évalué séquentiellement ; dès qu’une condition correspond, l’évaluation s’arrête
- Indexez les colonnes appropriées — Si CASE utilise des comparaisons sur des colonnes, les index peuvent aider
- Envisagez des colonnes calculées — Pour une logique CASE fréquemment utilisée, certaines bases de données prennent en charge des colonnes calculées indexées
Résumé
CASEajoute une logique conditionnelle aux requêtes SQL avec un comportement de type if-then-else- CASE simple compare une colonne à des valeurs spécifiques :
CASE column WHEN value THEN result - CASE recherchée évalue des conditions booléennes :
CASE WHEN condition THEN result - Peut être utilisé dans SELECT, WHERE, ORDER BY et les fonctions d’agrégation
- Les expressions CASE peuvent être imbriquées pour des arbres de décision complexes
- Incluez toujours une clause ELSE pour gérer les valeurs inattendues
- Pris en charge dans toutes les principales bases de données SQL avec une syntaxe cohérente
Essayez de modifier les exemples pour expérimenter différentes conditions et voir comment CASE peut simplifier votre logique conditionnelle !