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 VRAI
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 la suitewing sections.

In MS SQL, il existe deux types de CASE.

  1. CAS SIMPLE
  2. 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éyed.

Le diagramme ci-dessous illustre le flux d’exécution de Simple Case.

Fonctionnement de l'énoncé de cas simple
Fonctionnement de l'énoncé de cas simple

Exemples

Supposition: Supposons que nous ayons le tableau comme 'Guru99' avec deux colonnes et quatre lignes comme affichageyed ci-dessous :

Cas simple dans SQL Server

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.

Cas simple dans SQL Server

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 simple dans SQL Server

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é.yed.

Ci-dessous le diagramme illustrer le flux d'exécution du Cas recherché.

Fonctionnement de l'énoncé de cas recherché

Fonctionnement de l'énoncé de 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 des CAS RECHERCHÉ comprenant PAS D'AUTRE.

Exemple CASE recherché dans SQL Server

Requête 2 : CAS RECHERCHÉ des 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É comprenant AUTRE.

CASE recherché dans SQL Server

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'à premier booléen expression qui donne la valeur VRAI.

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:
CAS
QUAND Valeur_1 ALORS Déclaration_1…

Le mot-clé Case est suivi de l'instruction WHEN et il n'y a aucune expression entre CASE et WHEN.

Par exemple:
CAS QUAND ALORS Déclaration_1…

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:
CAS
QUAND Valeur_1 ALORS Déclaration_1…
QUAND Valeur_2 ALORS Déclaration_2…

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:
Adhésion
QUAND ALORS Déclaration_1…
QUAND ALORS Déclaration_2…

Simple Case prend en charge uniquement le contrôle d’égalité. C'est à dire si CASE_Expression = VALUE_1, VALUE_2…

Par exemple:
CAS WHEN Value_1 THEN Statement_1… Dans l'exemple ci-dessus, le seul operation effectuée par le système vérifie si Case_Expression = Value_1

Avec Boolean_Expression_N, Search Case prend en charge n'importe quel operation qui se traduit par une valeur booléenne. Il comprend égal et non égal à operator.

Par exemple:
CAS QUAND ALORS Statement_1… Dans l'exemple ci-dessus, Boolean_Expression_1 peut contenir à la fois « égal à » et « différent de » operator comme A = B, A != B.

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 suivantswing le résultat sera affichéyed:

  • 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é dans SQL Server

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 suivantswing le résultat sera affichéyed:

  • 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 $.

Exemple de CASE imbriqué dans SQL Server

CAS avec MISE À JOUR

Hypothèse : Supposons que nous ayons le tableau sous le nom de « Guru99 » avec deux colonnes et quatre lignes comme affichage.yed ci-dessous :

CAS avec UPDATE dans SQL Server

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'

CAS avec UPDATE dans SQL Server

Interrogons la table Guru99 pour vérifier la valeur mise à jour :

CAS avec UPDATE dans SQL Server

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.

CAS avec Order by dans SQL Server

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.