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

  1. Ordonnez judicieusement les conditions — Placez d’abord les conditions les plus probables
  2. Évitez les évaluations redondantes — CASE est évalué séquentiellement ; dès qu’une condition correspond, l’évaluation s’arrête
  3. Indexez les colonnes appropriées — Si CASE utilise des comparaisons sur des colonnes, les index peuvent aider
  4. 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é

  • CASE ajoute 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 !