Expressions CASE dans SELECT
Écrire une logique conditionnelle intégrée et distinguer les formes CASE recherchée et simple
Expressions CASE dans SELECT est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 4 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 Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.
CASE : l’expression conditionnelle de SQL
CASE correspond au if/then/else de SQL, mais c’est une expression qui renvoie une seule valeur : elle fonctionne donc partout où une valeur est acceptée, dans SELECT, WHERE, ORDER BY et même à l’intérieur d’agrégats.
SELECT order_id,
amount,
CASE WHEN amount > 100 THEN 'large' ELSE 'small' END AS size
FROM orders;Forme de CASE avec recherche
Le CASE avec recherche vérifie une condition booléenne pour chaque WHEN et renvoie la première correspondance. C’est la forme la plus flexible, et l’ordre est important : la première condition vraie l’emporte.
SELECT score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'F'
END AS grade
FROM exam_results;Forme simple de CASE
Le CASE simple compare une expression à une liste de valeurs. Il est plus court pour les tests d’égalité, mais ne permet pas de gérer les intervalles ni les tests sur NULL.
SELECT status_code,
CASE status_code
WHEN 1 THEN 'active'
WHEN 2 THEN 'paused'
WHEN 3 THEN 'closed'
ELSE 'unknown'
END AS status_label
FROM accounts;CASE avec recherche ou CASE simple : lequel utiliser ?
Utilisez le CASE simple pour comparer une valeur à des valeurs fixes, et le CASE avec recherche pour les intervalles ou NULL. Piège essentiel : un CASE simple ne peut jamais correspondre à NULL ; utilisez IS NULL dans une forme avec recherche.
-- Simple CASE will NOT catch NULL here
SELECT CASE WHEN bonus IS NULL THEN 'no bonus'
ELSE 'has bonus'
END AS bonus_flag
FROM employees;L’ordre des branches WHEN est important
Comme la première branche correspondante l’emporte, classez vos WHEN du plus spécifique au moins spécifique. Si vous placez d’abord un seuil trop général, un score de 95 sera mal étiqueté.
-- Correct order: highest threshold first
SELECT CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C or below'
END AS grade
FROM exam_results;ELSE et NULL implicite
Si rien ne correspond et que vous omettez ELSE, CASE renvoie NULL. Ajoutez un ELSE explicite pour définir la valeur par défaut afin que les valeurs inattendues ne deviennent pas silencieusement NULL.
-- No ELSE: anything not 1/2 becomes NULL
SELECT CASE flag WHEN 1 THEN 'yes' WHEN 2 THEN 'no' END AS label
FROM toggles;Agrégation conditionnelle (modèle de pivot)
Le meilleur truc d’entretien : l’agrégation conditionnelle. Placez CASE dans SUM ou COUNT pour comptabiliser les lignes par catégorie en un seul parcours : vous obtenez un rapport propre de type pivot.
SELECT
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid_orders,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_orders,
SUM(CASE WHEN status = 'paid' THEN amount ELSE 0 END) AS paid_revenue
FROM orders;COUNT ignore NULL : un raccourci avec CASE
Puisque COUNT ignore les NULL, vous pouvez omettre ELSE : les lignes qui ne correspondent pas deviennent NULL et ne sont pas comptées. C’est une manière légèrement plus courte d’effectuer un comptage conditionnel.
SELECT
COUNT(CASE WHEN status = 'paid' THEN 1 END) AS paid_orders,
COUNT(CASE WHEN status = 'pending' THEN 1 END) AS pending_orders
FROM orders;CASE dans ORDER BY pour un tri personnalisé
Placez CASE dans ORDER BY pour trier selon une priorité personnalisée plutôt que dans un ordre alphabétique ou numérique simple, par exemple les éléments urgents avant les éléments normaux, puis tous les autres.
SELECT order_id, status
FROM orders
ORDER BY
CASE status
WHEN 'urgent' THEN 1
WHEN 'normal' THEN 2
ELSE 3
END,
order_id;Cohérence des types entre les branches
Toutes les branches d’un CASE doivent renvoyer un type compatible. Mélanger un nombre et une chaîne peut provoquer une erreur ou forcer une conversion : choisissez un type de sortie et utilisez CAST explicitement si nécessaire.
-- Keep branches the same type
SELECT CASE WHEN qty > 0 THEN CAST(qty AS VARCHAR)
ELSE 'none'
END AS qty_label
FROM inventory;CASE dans WHERE pour un filtrage conditionnel
CASE dans WHERE vous permet d’appliquer une logique de filtrage différente selon un indicateur, par exemple un seuil de prix différent pour chaque région. C’est souvent plus lisible qu’un enchevêtrement de AND et de OR.
SELECT order_id, amount, region
FROM orders
WHERE amount > CASE region
WHEN 'US' THEN 100
WHEN 'EU' THEN 90
ELSE 50
END;Vérification rapide
Prévoyez le résultat.
Récapitulatif
Récapitulatif : CASE renvoie une seule valeur et fonctionne dans SELECT, WHERE, ORDER BY et les agrégats. La forme avec recherche gère les intervalles et NULL ; la première correspondance l’emporte ; aucune correspondance signifie NULL ; les types des branches doivent rester compatibles.
Questions Fréquemment Posées
La leçon « Expressions CASE dans SELECT » est-elle gratuite ?
Oui — le texte complet de « Expressions CASE dans SELECT » 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 Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Expressions CASE dans SELECT » ?
Écrire une logique conditionnelle intégrée et distinguer les formes CASE recherchée et simple Tu pratiques SQL Interview Prep 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 Interview Prep ?
Aucune expérience préalable n'est requise. SQL Interview Prep 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 4 sur 4.
Combien de temps prend la leçon « Expressions CASE dans SELECT » ?
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 Interview Prep ?
Oui. Chaque leçon SQL Interview Prep 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
- Projection de colonnes et pièges liés aux alias
- Colonnes calculées et priorité des expressions
- DISTINCT ou GROUP BY pour l’unicité
- Expressions CASE dans SELECT