Instruction CASE et cas imbriqués dans SQL Server : exemple T-SQL
Aperçu de Case dans la vraie vie !
Encore une fois, dans la vraie vie, nous effectuons différentes actions en fonction du résultat de différentes conditions.
Pour en savoir plus, considérons l'exemple ci-dessous :
- 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, je visiterai New York.
- Si les billets d'avion coûtent entre 200 et 400 dollars, je visiterai l'Europe.
- Sinon, je préférerai visiter un lieu touristique à proximité.
Envisageons de catégoriser la condition et l'action séparément de l'exemple ci-dessus :
Les conditions - Billets de vol | Actions réalisées, seulement si la Condition est TRUE |
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, nous pouvons voir que le résultat des différentes conditions régit une action séparée. Par exemple, le visiteur effectuera l'acte de visiter New York uniquement à la condition que le billet d'avion soit compris entre 100 $ et 200 $.
De même, l'instruction MS SQL 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 l'instruction IF…ELSE. Contrairement à IF…ELSE, où seul le maximum d'une condition est autorisé, CASE permet à l'utilisateur d'appliquer plusieurs conditions pour effectuer différents ensembles d'actions dans MS SQL. Il renvoie une valeur correspondante associée à la condition définie par l'utilisateur.
Apprenons comment utiliser Case en SQL et son concept dans les sections suivantes.
In MS SQL, il existe deux types de CASE.
- CAS SIMPLE
- CAS recherché
CAS SIMPLE
La syntaxe du cas simple
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 Expression_de cas désigne l'expression à laquelle on sera finalement comparé Valeur_1, Valeur_2, ...
- Les paramètres Déclaration_1, Déclaration_2… désigne les instructions qui seront exécutées si Case_Expression = Valeur_1, Case_Expression = Value_2,… et ainsi de suite.
- En un mot, le condition est de savoir si Case_Expression = Value_N et ACTION sont l'exécution de Statement_N si le le résultat ci-dessus est VRAI.
- ALIAS est facultatif et correspond au nom d'alias donné au résultat de l'instruction SQL Server CASE. Principalement utilisé lorsque nous utilisons Case dans la clause de sélection du serveur SQL.
Règles pour les cas simples
- Simple Case permet uniquement la vérification de l'égalité de Case_Expression avec Value_1 à Value_N.
- Case_Expression est comparé à Value, dans l'ordre en commençant par la première valeur, c'est-à-dire Value_1. Vous trouverez ci-dessous l’approche 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, Case_Expression est comparé à Value_2 pour l'équivalence. Ce processus de comparaison de Case_Expression avec Value se poursuivra jusqu'à ce que Case_Expression trouve une valeur équivalente correspondante dans l'ensemble de Value_1, Value_2,…
- Si rien ne correspond, alors le contrôle passe à l'instruction ELSE et Statement_Else sera exécuté.
- ELSE est facultatif.
- Si ELSE n'est pas présent et que Case_Expression ne correspond à aucune des valeurs, alors Nul sera affiché.
Le diagramme ci-dessous illustre le flux d’exécution de Simple Case.
Exemples
Supposition: Supposons que nous ayons le tableau comme 'Guru99' avec deux colonnes et quatre lignes comme indiqué ci-dessous :
Nous utiliserons 'Guru99' tableau dans d'autres exemples
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 AUTRE.
Requête 2 : CAS 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 ELSE.
CAS recherché
La syntaxe du cas recherché
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 comme VRAI ou FAUX.
- Les paramètres Statement_1, Statement_2… désignent les Statements qui s'exécuteront si leur résultat Boolean_Expression_1, Boolean_Expression_2 correspondant est TRUE.
- En un mot, Condition est Boolean_Expression_1,… et ACTION est l'exécution de Statement_N si ci-dessus boolean_Expression_1 est TRUE.
- ALIAS_NAME est facultatif et correspond au nom d'alias donné au résultat de l'instruction CASE. Principalement utilisé lorsque nous utilisons CASE dans la clause select.
Règles pour le cas recherché
- Contrairement au cas simple, Searched Case ne se limite pas à la seule vérification d’égalité mais permet une expression booléenne.
- L'expression booléenne est évaluée dans l'ordre en commençant par la première expression booléenne, c'est-à-dire Boolean_expression_1. Vous trouverez ci-dessous l’approche d’exécution :
- Si Boolean_expression_1 est TRUE, alors les autres instructions WHEN…THEN sont ignorées et l'exécution de CASE se terminera immédiatement.
- Si Boolean_expression_1 est FALSE, alors Boolean_expression_2 est évalué pour la condition TRUE. Ce processus d'évaluation de Boolean_expression se poursuivra jusqu'à ce que l'une des Boolean_expression renvoie TRUE.
- Si rien ne correspond, alors le contrôle passe à l'instruction ELSE et Statement_Else sera exécuté.
- Comme Simple Case, ELSE est également facultatif dans le cas de recherche.
- Si ELSE n’est pas présent et qu’aucune des expressions booléennes ne renvoie TRUE, alors Null sera affiché.
Ci-dessous le diagramme illustrer 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: Schéma ci-dessous explique le flux d'exécution du système CAS RECHERCHÉ avec PAS D'AUTRE.
Requête 2 : CAS RECHERCHÉ grâce à la fonction AUTRE option.
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: Schéma ci-dessous explique le flux d'exécution of le CAS RECHERCHÉ avec AUTRE.
Différence entre l'approche d'exécution : SIMPLE et SEARCH CASE.
Jetons un coup d'oeil à CAS SIMPLE exemple 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, 'nom_du_tutoriel' fait partie de l'expression CASE dans SQL. Alors 'nom_du_tutoriel' la valeur est comparée à chaque QUAND les valeurs, c'est-à-dire 'SQL'… jusqu'à ce que 'Tutorial_name' corresponde aux valeurs WHEN.
Au contraire, CAS DE RECHERCHE l'exemple n'a pas Expression de CAS:
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 QUAND instruction a son Expression booléenne conditionnelle. Chaque Expression booléenne c'est-à-dire Tutorial_name = 'SQL',… est évalué pour VRAI FAUX jusqu'au premier booléen expression qui donne la valeur TRUE.
Différence entre le cas simple et le cas recherché
Cas simple | Cas recherché |
---|---|
Le mot clé CASE est immédiatement suivi de CASE_Expression et avant l'instruction WHEN.
Par exemple: |
Le mot-clé Case est suivi de l'instruction WHEN et il n'y a aucune expression entre CASE et WHEN.
Par exemple: |
Dans le cas simple, VALUE existe pour chaque instruction WHEN. Ces valeurs : Value_1, Value_2… sont comparées séquentiellement à un seul CASE_Expression. Le résultat est évalué pour la condition VRAI/FAUX pour chaque instruction WHEN.
Par exemple: |
Dans Searched Case, Boolean_Expression existe pour chaque instruction WHEN. Ces Boolean_Expressions : Boolean_Expression_1, Boolean_Expression_2,… évalue la condition TRUE/FALSE pour chaque instruction WHEN.
Par exemple: |
Simple Case prend en charge uniquement le contrôle d’égalité. C'est à dire si CASE_Expression = VALUE_1, VALUE_2…
Par exemple: |
Avec Boolean_Expression_N, Search Case prend en charge toute opération qui aboutit à une valeur booléenne. Il comprend les opérateurs égal et non égal à.
Par exemple: |
CASE imbriqué : CASE dans IF ELSE
Nous pouvons utiliser CAS à l'intérieur SI Ailleurs. Ci-dessous l'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, CASE est NESTED dans l'instruction IF…ELSE :
Tout d’abord, l’instruction IF s’exécutera et si la condition du cas dans Serveur SQL est faux, alors l'instruction ELSE s'exécutera.
Sinon, il contient une instruction CASE imbriquée dans SQL. En fonction de la valeur du billet d'avion, l'un des résultats suivants sera affiché :
- Le système affichera « Visiter un lieu touristique à proximité » si les billets d'avion coûtent > 400 $.
- Le système imprimera « Visitez Los Angeles » si les billets d'avion sont ENTRE 0 $ ET 100 $.
- Le système imprimera « Visit New York » si les billets d'avion sont ENTRE 101 $ ET 200 $.
- Le système imprimera « Visiter l'Europe » si les billets d'avion sont ENTRE 201 $ ET 400 $.
CASE imbriqué : CASE dans CASE
Nous pouvons utiliser CASE dans CASE en SQL. Ci-dessous l'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, CASE est NESTED dans une autre instruction CASE :
Le système commence par exécuter le CASE externe. Si Flight_Ticket < 400 $, le CASE interne s'exécutera.
En fonction de la valeur du billet d'avion, l'un des résultats suivants sera affiché :
- Le système affichera « Visiter un lieu touristique à proximité » si les billets d'avion coûtent > 400 $.
- Le système imprimera « Visitez Los Angeles » si les billets d'avion sont ENTRE 0 $ ET 100 $.
- Le système imprimera « Visit New York » si les billets d'avion sont ENTRE 101 $ ET 200 $.
- Le système imprimera « Visiter l'Europe » si les billets d'avion sont ENTRE 201 $ ET 400 $.
CAS avec MISE À JOUR
Hypothèse : Supposons que nous ayons le tableau « Guru99 » avec deux colonnes et quatre lignes, comme indiqué ci-dessous :
Nous utiliserons la table 'Guru99' dans d'autres exemples
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, CASE est utilisé dans l'instruction UPDATE.
En fonction de la valeur Tutorial_Name, la colonne Tutorial_Name obtiendra la mise à jour avec la valeur de l'instruction THEN.
- Si Tutorial_Name = 'SQL' ALORS mettez à jour Tutorial_Name en 'Langage de requête structuré'
- Si Tutorial_Name = 'PL/SQL' ALORS mettez à jour Tutorial_Name en 'Oracle PL/SQL'
- Si Tutorial_Name = 'MSSQL' ALORS mettez à jour Tutorial_Name vers 'Microsoft SQL'
- Si Tutorial_Name = 'Hadoop' ALORS mettez à jour Tutorial_Name vers 'Apache Hadoop'
Interrogons la table Guru99 pour vérifier la valeur mise à jour :
CAS avec Commande par
Nous pouvons utiliser CASE avec Order By. Vous trouverez ci-dessous l'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, CASE est utilisé avec Order By.
@Order est défini sur 1 et lorsque la première expression booléenne est évaluée à TRUE, Tutorial_ID est sélectionné pour Order by Condition.
Faits intéressants!
- CASE peut être imbriqué dans un autre CASE ainsi que dans une autre instruction IF…ELSE.
- En plus de SELECT, CASE peut être utilisé avec un autre SQL clause comme UPDATE, ORDER BY.
Résumé
- Dans MS SQL, il existe deux types de CASE : CASE simple et CASE recherché.
- ELSE est facultatif dans l'instruction CASE.