0Pricing
SQL Academy · Leçon

L’expression CASE

Une logique IF/THEN à l’intérieur d’une requête.

L’expression CASE est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Logique conditionnelle en SQL

Vous devez parfois demander à une requête de prendre une décision : si ceci, alors cela, sinon autre chose. SQL fournit l'expression CASE précisément pour cela.

CASE vous permet de renvoyer des valeurs différentes selon les conditions, directement dans un SELECT. Considérez-la comme l'équivalent SQL d'une chaîne if/else.

SELECT name,
       CASE WHEN price > 100 THEN 'expensive'
            ELSE 'affordable'
       END AS price_band
FROM products;

Anatomie de CASE

Une expression CASE comporte plusieurs éléments :

  • WHEN condition THEN value — une ou plusieurs branches
  • ELSE value — une valeur de repli facultative
  • END — ferme l'expression (obligatoire !)

SQL évalue les branches WHEN de haut en bas et renvoie la valeur de la première branche vraie.

CASE WHEN condition1 THEN result1
     WHEN condition2 THEN result2
     ELSE default_result
END

CASE renvoie une valeur

L'idée essentielle est la suivante : une expression CASE produit une seule valeur par ligne. Comme elle produit une valeur, vous pouvez l'utiliser partout où une valeur est autorisée : dans la liste SELECT, dans WHERE, dans ORDER BY, et même à l'intérieur de fonctions.

Ici, elle attribue un statut simple à chaque commande.

SELECT order_id,
       CASE WHEN shipped_at IS NOT NULL THEN 'shipped'
            WHEN paid_at IS NOT NULL THEN 'paid'
            ELSE 'pending'
       END AS status
FROM orders;

La première correspondance l'emporte

L'ordre est important. SQL vérifie chaque WHEN dans l'ordre et s'arrête à la première condition vraie. Les branches suivantes sont ignorées, même si elles correspondent également.

Ci-dessous, une commande supérieure à 1000 est 'importante', et jamais 'moyenne', car la première branche correspondante l'emporte.

SELECT order_id, total,
       CASE WHEN total >= 1000 THEN 'large'
            WHEN total >= 100  THEN 'medium'
            ELSE 'small'
       END AS size_band
FROM orders;

La branche ELSE

La branche ELSE est la branche générale. Si aucune condition WHEN n'est vraie, CASE renvoie la valeur de ELSE.

Si vous omettez ELSE et qu'aucune condition ne correspond, CASE renvoie NULL. C'est une source fréquente de NULL inattendus : ajoutez donc un ELSE explicite lorsque vous voulez une valeur de repli définie.

SELECT name,
       CASE WHEN stock = 0 THEN 'out of stock' END AS note
FROM products;
-- rows with stock > 0 get NULL in note (no ELSE)

Les conditions peuvent être quelconques

Une condition WHEN est simplement une expression booléenne — du même type que celle que vous écrivez dans une clause WHERE. Vous pouvez utiliser des comparaisons, AND, OR, BETWEEN, IN, LIKE et bien d'autres éléments.

SELECT email,
       CASE WHEN country IN ('US','CA') AND age >= 18 THEN 'eligible'
            WHEN email LIKE '%@test.com'             THEN 'test account'
            ELSE 'review'
       END AS segment
FROM users;

Les types de résultat doivent être compatibles

Chaque branche d'un CASE doit renvoyer des valeurs d'un type compatible, car la colonne doit avoir un type unique. Mélanger du texte et des nombres provoquera une erreur ou une conversion de type inattendue.

Si vous avez besoin de nombres dans une branche et de texte dans une autre, effectuez explicitement une conversion de type afin d'aligner les types.

SELECT product_id,
       CASE WHEN on_sale THEN price * 0.9
            ELSE price
       END AS effective_price   -- all branches numeric: good
FROM products;

Utiliser CASE dans WHERE

Comme CASE produit une valeur, vous pouvez comparer son résultat dans une clause WHERE. Cela est pratique pour les règles de filtrage dynamiques.

Toutefois, une logique booléenne simple dans WHERE est souvent plus claire : utilisez CASE dans WHERE uniquement lorsque les branches simplifient réellement la condition.

SELECT *
FROM orders
WHERE CASE WHEN priority = 'high' THEN total > 0
           ELSE total > 500
      END;

Imbriquer CASE

Vous pouvez placer un CASE à l'intérieur d'une autre branche CASE pour exprimer une logique à plusieurs niveaux. Cela fonctionne, mais les expressions profondément imbriquées deviennent difficiles à lire.

Limitez la profondeur d'imbrication : si elle augmente, une colonne distincte ou une table de correspondance est généralement plus claire.

SELECT order_id,
       CASE WHEN region = 'EU' THEN
              CASE WHEN total > 100 THEN 'EU big'
                   ELSE 'EU small' END
            ELSE 'other'
       END AS bucket
FROM orders;

CASE avec des agrégats

Voici un modèle puissant : placez un CASE à l'intérieur d'un agrégat comme SUM ou COUNT. Cela permet de compter ou d'additionner les lignes selon une condition en un seul parcours — on parle parfois d'agrégation conditionnelle ou de tableau croisé.

SELECT
  COUNT(*) AS total_orders,
  SUM(CASE WHEN status = 'shipped' THEN 1 ELSE 0 END) AS shipped,
  SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending
FROM orders;

CASE renvoyant NULL volontairement

Renvoyer NULL depuis une branche est parfois exactement ce qu'il vous faut — par exemple pour masquer une valeur que vous ne voulez pas afficher, ou pour alimenter un agrégat ultérieur qui ignore les NULL.

Ici, seules les commandes importantes conservent leur total ; les autres deviennent NULL, afin que AVG les ignore.

SELECT order_id,
       CASE WHEN total >= 1000 THEN total
            ELSE NULL
       END AS large_order_total
FROM orders;

Vérification rapide

Considérez cette expression pour une ligne où total = 1500 :

CASE WHEN total >= 100 THEN 'medium' WHEN total >= 1000 THEN 'large' ELSE 'small' END

Quelle valeur renvoie-t-elle ?

Récapitulatif : l’expression CASE

Vous avez appris les bases de la logique conditionnelle en SQL :

  • CASE WHEN ... THEN ... ELSE ... END renvoie une valeur par ligne
  • Les branches sont vérifiées de haut en bas ; la première correspondance l’emporte
  • Omettre ELSE renvoie NULL lorsqu’aucune correspondance n’est trouvée
  • Toutes les branches doivent renvoyer des types compatibles
  • CASE fonctionne dans SELECT, WHERE et à l’intérieur des fonctions d’agrégation

Ensuite, nous comparerons les deux formes syntaxiques de CASE.

SELECT name,
       CASE WHEN price > 100 THEN 'expensive'
            WHEN price > 20  THEN 'mid'
            ELSE 'cheap'
       END AS tier
FROM products;

Questions Fréquemment Posées

La leçon « L’expression CASE » est-elle gratuite ?

Oui — le texte complet de « L’expression CASE » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « L’expression CASE » ?

Une logique IF/THEN à l’intérieur d’une requête. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « L’expression CASE » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. L’expression CASE
  2. CASE recherché ou simple
  3. Regrouper et étiqueter les données
  4. CASE dans ORDER BY et les agrégations
← Retour à SQL Academy