Instruction CASE et cas imbriqués dans SQL Server : exemple T-SQL
⚡ Résumé intelligent
CASE est une expression conditionnelle dans SQL Server qui renvoie une valeur en fonction de la première condition qui est évaluée à vrai, offrant des formes Simple et Searched ainsi que l'imbrication dans IF…ELSE, UPDATE et ORDER BY.

Aperçu de Case dans la vraie vie !
Là encore, dans la vie réelle, nous agissons différemment selon les circonstances. Pour illustrer ce propos, prenons l'exemple suivant :
- Si les billets d'avion coûtent moins de 100 $, je visiterai Los Angeles.
- Si les billets d'avion coûtent entre 100 et 200 dollars, alors j'irai à New York.
- Si les billets d'avion coûtent entre 200 et 400 dollars, alors j'irai en Europe.
- Sinon, je préférerai visiter un site touristique à proximité.
Considérons maintenant la possibilité de catégoriser séparément la condition et l'action à partir de l'exemple ci-dessus :
| Conditions – Billets d'avion | Actions effectuées uniquement si la condition est VRAIE |
| Moins de 100 $ | Visitez Los Angeles |
| Entre $ 100 et $ 200 | Visiter New-York |
| Entre $ 200 et $ 400 | Visiter l'Europe |
| Aucune des conditions ci-dessus n'est remplie | Lieu touristique à proximité |
Dans l'exemple ci-dessus, on constate que le résultat des différentes conditions détermine une action distincte. Par exemple, le visiteur se rendra à New York uniquement si le prix du billet d'avion se situe entre 100 et 200 dollars. De même, MS SQL L'instruction CASE offre également la possibilité d'exécuter différentes instructions T-SQL en fonction du résultat de différentes conditions.
Qu’est-ce que l’instruction CASE dans SQL Server ?
Instruction CASE dans SQL Server est l'extension de SINON Contrairement à l'instruction IF…ELSE, qui n'autorise qu'une seule condition, l'instruction CASE permet à l'utilisateur d'appliquer plusieurs conditions pour effectuer différentes actions dans MS SQL. Elle renvoie la valeur correspondante à la condition définie par l'utilisateur.
Apprenons à utiliser CASE dans SQL et son concept dans les sections suivantes. En MS SQL, il existe deux types d'instructions CASE :
- CAS SIMPLE
- CAS recherché
CAS SIMPLE
Syntaxe pour les cas simples
CASE <Case_Expression> WHEN Value_1 THEN Statement_1 WHEN Value_2 THEN Statement_2 . . WHEN Value_N THEN Statement_N [ELSE Statement_Else] END AS [ALIAS_NAME]
Ici:
- Le paramètre Case_Expression désigne l'expression qui sera finalement comparée à Value_1, Value_2, etc.
- Les paramètres Statement_1, Statement_2… désignent les instructions qui seront exécutées si Case_Expression = Value_1, Case_Expression = Value_2, etc.
- En résumé, la condition est de savoir si Case_Expression = Value_N, et l'action est l'exécution de Statement_N si le résultat ci-dessus est VRAI.
- Le paramètre ALIAS_NAME est facultatif et correspond à l'alias attribué au résultat de l'instruction CASE de SQL Server. Il est principalement utilisé lorsque CASE est employé dans la clause SELECT de SQL Server.
Règles pour les cas simples
- Simple Case n'autorise qu'une vérification d'égalité de Case_Expression avec Value_1 à Value_N.
- L'expression Case_Expression est comparée à une valeur, dans l'ordre, en commençant par la première valeur, c'est-à-dire Value_1. Voici le mode d'exécution :
- Si Case_Expression est équivalent à Value_1, alors les autres instructions WHEN…THEN sont ignorées et l'exécution de CASE se terminera immédiatement.
- Si Case_Expression ne correspond pas à Value_1, elle est comparée à Value_2 pour déterminer son équivalence. Ce processus de comparaison se poursuit jusqu'à ce que Case_Expression trouve une valeur équivalente parmi Value_1, Value_2, etc.
- Si aucune correspondance n'est trouvée, le contrôle passe à l'instruction ELSE, et Statement_Else est exécutée.
- ELSE est facultatif.
- Si ELSE n'est pas présent et que Case_Expression ne correspond à aucune des valeurs, alors NULL est affiché.
Le diagramme ci-dessous illustre le flux d'exécution d'un cas simple :
Exemples
Supposons que nous ayons une table nommée 'Guru99' avec deux colonnes, Tutorial_ID et Tutorial_name, et quatre lignes, comme indiqué ci-dessous. Nous utiliserons ce 'GuruTableau 99 dans les exemples qui suivent.
Requête 1 : CAS SIMPLE avec l'option NO ELSE
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Résultat : Le diagramme ci-dessous explique le flux d’exécution d’un cas simple sans instruction else.
Requête 2 : CASE SIMPLE avec l'option ELSE
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Résultat : Le diagramme ci-dessous explique le flux d’exécution d’un cas simple avec une instruction ELSE.
CAS recherché
Syntaxe pour la recherche de cas
CASE WHEN <Boolean_Expression_1> THEN Statement_1 WHEN <Boolean_Expression_2> THEN Statement_2 . . WHEN <Boolean_Expression_N> THEN Statement_N [ELSE Statement_Else] END AS [ALIAS_NAME]
Ici:
- Le paramètre Boolean_Expression_1… désigne l'expression qui sera évaluée pour VRAI ou FAUX.
- Les paramètres Statement_1, Statement_2… désignent les instructions qui seront exécutées si le résultat correspondant de Boolean_Expression_1, Boolean_Expression_2 est TRUE.
- En résumé, la condition est Boolean_Expression_1… et l'action consiste à exécuter Statement_N si l'expression Boolean_Expression_1 ci-dessus est VRAIE.
- L'argument ALIAS_NAME est facultatif et correspond à l'alias donné au résultat de l'instruction CASE. Il est généralement utilisé lorsque CASE figure dans la clause SELECT.
Règles pour le cas recherché
- Contrairement au cas simple, le cas recherché ne se limite pas à un simple contrôle d'égalité, mais autorise une expression booléenne.
- L'expression booléenne est évaluée séquentiellement, en commençant par la première expression booléenne, c'est-à-dire Boolean_Expression_1. Voici le mode d'exécution :
- Si Boolean_Expression_1 est TRUE, alors les instructions WHEN…THEN suivantes sont ignorées et l'exécution de CASE se termine immédiatement.
- Si Boolean_Expression_1 est FAUX, alors Boolean_Expression_2 est évaluée pour déterminer si elle est VRAIE. Ce processus d'évaluation des expressions booléennes se poursuit jusqu'à ce que l'une des expressions booléennes soit VRAIE.
- Si aucune correspondance n'est trouvée, le contrôle passe à l'instruction ELSE, et Statement_Else est exécutée.
- Comme dans le cas simple, ELSE est également facultatif dans le cas recherché.
- Si ELSE n'est pas présent et qu'aucune des expressions booléennes ne renvoie TRUE, alors NULL est affiché.
Le diagramme ci-dessous illustre le flux d'exécution du cas recherché :
Exemples
Requête 1 : CAS RECHERCHÉ avec l'option NO ELSE
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Résultat : Le diagramme ci-dessous explique le flux d'exécution du cas recherché sans clause ELSE.
Requête 2 : CASE RECHERCHÉ avec l'option ELSE
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Résultat : Le diagramme ci-dessous explique le flux d’exécution du cas recherché avec la clause ELSE.
Différence entre l'approche d'exécution : cas simple et cas de recherche
Examinons l'exemple du CAS SIMPLE ci-dessous :
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Ici, « Tutorial_name » fait partie de l’expression CASE en SQL. La valeur de « Tutorial_name » est ensuite comparée à chaque valeur WHEN, c’est-à-dire « SQL »… jusqu’à ce que « Tutorial_name » corresponde à une valeur WHEN.
Au contraire, l'exemple SEARCH CASE ne contient aucune expression CASE :
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Ici, chaque instruction WHEN possède sa propre expression booléenne conditionnelle. Chaque expression booléenne, par exemple Tutorial_name = 'SQL'…, est évaluée pour VRAI/FAUX jusqu'à la première expression booléenne qui est évaluée à VRAI.
Différence entre le cas simple et le cas recherché
| Cas simple | Cas recherché |
| Le mot-clé CASE est immédiatement suivi de l'expression CASE et précède l'instruction WHEN.
Par exemple: |
Le mot-clé CASE est suivi de l'instruction WHEN, et il n'y a pas d'expression entre CASE et WHEN.
Par exemple: |
| Dans un cas simple, une valeur est associée à chaque instruction WHEN. Ces valeurs (Valeur_1, Valeur_2…) sont comparées séquentiellement à une seule expression CASE. Le résultat est évalué pour déterminer si la condition est VRAI ou FAUX pour chaque instruction WHEN.
Par exemple: |
Dans un cas de recherche, une expression booléenne est associée à chaque instruction WHEN. Ces expressions booléennes (Boolean_Expression_1, Boolean_Expression_2…) évaluent la condition VRAI/FAUX pour chaque instruction WHEN.
Par exemple: |
| Un cas simple ne prend en charge qu'une vérification d'égalité, c'est-à-dire si CASE_Expression = VALUE_1, VALUE_2…
Par exemple: |
Avec Boolean_Expression_N, un cas recherché prend en charge toute opération produisant une valeur booléenne. Cela inclut les opérateurs d'égalité et de différence.
Par exemple: |
CASE imbriqué : CASE dans IF ELSE
Nous pouvons utiliser CASE à l'intérieur d'une instruction IF…ELSE. Nous déclarons une variable pour le billet d'avion et la branche en fonction de sa valeur. Voici un exemple de code MS-SQL :
DECLARE @Flight_Ticket int; SET @Flight_Ticket = 190; IF @Flight_Ticket > 400 PRINT 'Visit Nearby Tourist Location'; ELSE BEGIN SELECT CASE WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles' WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York' WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe' END AS Location END
Dans l'exemple ci-dessus, l'instruction CASE est imbriquée dans une instruction IF…ELSE. L'instruction IF s'exécute en premier, et si la condition CASE dans SQL Server est fausse, l'instruction ELSE s'exécute. La partie ELSE contient une instruction CASE imbriquée dans SQL. Selon la valeur du billet d'avion, l'un des résultats suivants s'affiche :
- Le système affiche « Visitez un site touristique à proximité » si les billets d'avion coûtent plus de 400 $.
- Le système affiche « Visitez Los Angeles » si le prix des billets d'avion est compris entre 0 et 100 dollars.
- Le système affiche « Visitez New York » si les billets d'avion coûtent entre 101 $ et 200 $.
- Le système affiche « Visitez l'Europe » si les billets d'avion coûtent entre 201 $ et 400 $.
Le résultat ci-dessous indique l'emplacement renvoyé lorsque l'instruction CASE imbriquée est exécutée à l'intérieur de la branche ELSE :
CASE imbriqué : CASE dans CASE
En SQL, il est possible d'imbriquer des instructions CASE. Voici un exemple de code MS-SQL :
DECLARE @Flight_Ticket int; SET @Flight_Ticket = 250; SELECT CASE WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.' WHEN @Flight_Ticket < 400 THEN CASE WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles' WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York' WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe' END END AS Location
Dans l'exemple ci-dessus, une instruction CASE est imbriquée dans une autre instruction CASE. Le système exécute d'abord l'instruction CASE externe ; si Flight_Ticket < $400, l'instruction CASE interne est exécutée. La destination renvoyée suit les mêmes tranches de prix que dans l'exemple précédent : un billet à 250 $ se situe dans la tranche 201 $–400 $ et la destination renvoyée est « Visit Europe ».
Le résultat ci-dessous indique l'emplacement renvoyé par le CASE interne pour un billet de 250 $ :
CAS avec MISE À JOUR
Supposons à nouveau que nous ayons le 'GuruTableau 99' à deux colonnes et quatre lignes, comme illustré ci-dessous :
Nous pouvons utiliser CASE avec UPDATE. Vous trouverez ci-dessous l'exemple de code MS-SQL :
UPDATE Guru99 SET Tutorial_Name = ( CASE WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.' WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL' WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.' WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.' END )
Dans l'exemple ci-dessus, l'instruction CASE est utilisée dans la clause UPDATE. Selon la valeur de Tutorial_Name, la colonne Tutorial_Name est mise à jour avec la valeur de l'instruction THEN :
- Si Tutorial_Name = 'SQL', alors mettez à jour Tutorial_Name en 'Structured Query language'.
- Si Tutorial_Name = 'PL/SQL', alors mettre à jour Tutorial_Name à 'Oracle PL/SQL'.
- Si Tutorial_Name = 'MSSQL', alors mettez à jour Tutorial_Name à 'Microsoft SQL'.
- Si Tutorial_Name = 'Hadoop', alors mettez à jour Tutorial_Name à 'Apache Hadoop'.
L'exécution de cette instruction met à jour les lignes correspondantes, comme indiqué ci-dessous :
Interrogeons le «GuruTableau 99 pour vérifier les valeurs mises à jour :
CAS avec Commande par
Nous pouvons utiliser CASE avec ORDER BY. Voici un exemple de code MS-SQL :
Declare @Order Int; Set @Order = 1 Select * from Guru99 order by CASE WHEN @Order = 1 THEN Tutorial_ID WHEN @Order = 2 THEN Tutorial_Name END DESC
Ici, l'instruction CASE est utilisée avec la clause ORDER BY. L'argument @Order est défini sur 1, et comme la première expression booléenne WHEN est évaluée à TRUE, Tutorial_ID est sélectionné pour la condition ORDER BY. Le résultat est affiché ci-dessous :
Faits intéressants!
- L'instruction CASE peut être imbriquée dans une autre instruction CASE ainsi que dans une instruction IF…ELSE.
- En plus de SELECT, CASE peut être utilisé avec d'autres clauses SQL comme UPDATE et ORDER BY.













