Declarație CASE și caz imbricat în SQL Server: Exemplu T-SQL

Prezentare generală a Casei în viața reală!

Din nou, în viața reală, efectuăm diferite acțiuni în funcție de rezultatul diferitelor condiții.

Pentru a detalia mai multe, luați în considerare exemplul de mai jos:

  • Dacă biletele de avion sunt mai mici de 100 USD, atunci voi vizita Los Angeles.
  • Dacă biletele de avion sunt între 100 și 200 de dolari, atunci voi vizita New York
  • Dacă biletele de avion sunt între 200 și 400 de dolari, atunci voi vizita Europa
  • În rest, voi prefera să vizitez un loc turistic din apropiere.

Să luăm în considerare clasificarea Condiției și Acțiunii separat de exemplul de mai jos:

Conditii - Bilete de zbor Acțiuni efectuate, numai dacă Condiția este TRUE
Less mai mult de 100 USD Vizitează Los Angeles
Între $ 100 și $ 200 Vizitează New York
Între $ 200 și $ 400 Vizitează Europa
Niciuna dintre condițiile de mai sus nu a fost îndeplinită Loc turistic din apropiere

În exemplul de mai sus, putem vedea că rezultatul diferitelor condiții guvernează acțiunile separate. De exemplu, Vizitatorul va efectua acțiunea de a vizita New York numai în cazul în care biletul de avion este între 100 USD și 200 USD.

În mod similar, instrucțiunea MS SQL CASE oferă, de asemenea, capacitatea de a lua măsuri pentru a executa diferite instrucțiuni T-SQL pe baza rezultatului diferitelor condiții.

Ce este instrucțiunea CASE în SQL Server?

Declarația CASE în SQL Server este extensia instrucțiunii IF...ELSE. Spre deosebire de IF...ELSE, unde este permisă doar maximum o condiție, CASE permite utilizatorului să aplice mai multe condiții pentru a efectua diferite seturi de acțiuni în MS SQL. Returnează o valoare corespunzătoare asociată cu condiția definită de utilizator.

Să învățăm cum să folosim Case în SQL și conceptul său în secțiunile următoare.

In MS SQL, există două tipuri de CAZ.

  1. CAZ simplu
  2. S-a căutat CASE

CAZ simplu

Sintaxa pentru cazuri 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]

Aici,

  • Parametrul Case_Expression denotă expresia cu care vom fi în cele din urmă comparați Valoare_1, Valoare_2, ...
  • Parametrii Declarație_1, Declarație_2… denotă instrucțiunile care vor fi executate dacă Case_Expression = Value_1, Case_Expression = Value_2, … și așa mai departe.
  • Pe scurt, condiție este dacă Case_Expression = Value_N și ACTION este execuția Statement_N dacă rezultatul de mai sus este ADEVĂRAT.
  • PORECLA este opțional și este numele alias dat rezultatului instrucțiunii CASE SQL Server. Folosit mai ales atunci când folosim case în clauza de selectare a serverului SQL.

Reguli pentru cazuri simple

  • Simple Case permite doar verificarea egalității Case_Expression cu Value_1 la Value_N.
  • Case_Expression este comparată cu Value, în ordine pornind de la prima valoare, adică Value_1. Mai jos este abordarea execuției:
  • Dacă Case_Expression este echivalentă cu Value_1, atunci alte instrucțiuni WHEN…THEN sunt omise, iar execuția CASE se va TERMINA imediat.
  • Dacă Case_Expression nu se potrivește cu Value_1, atunci Case_Expression este comparată cu Value_2 pentru echivalență. Acest proces de comparare Case_Expression cu Value va continua până când Case_Expression găsește o valoare echivalentă potrivită din setul Value_1, Value_2,...
  • Dacă nimic nu se potrivește, atunci controlul trece la instrucțiunea ELSE și Statement_Else va fi executat.
  • ELSE este opțional.
  • Dacă ELSE nu este prezent și Case_Expression nu se potrivește cu niciuna dintre valori, atunci Null va fi afișat.

Diagrama de mai jos ilustrează fluxul de execuție al cazului simplu.

Funcționarea cazului simplu
Funcționarea cazului simplu

Exemple

Presupunere: Să presupunem că avem tabelul ca „Guru99” cu două coloane și patru rânduri, așa cum este afișat mai jos:

Caz simplu în SQL Server

Noi vom folosi „Guru99” tabel în alte exemple

Interogarea 1: CAZ SIMPLU cu opțiunea 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

Rezultat: Diagrama de mai jos explică fluxul de execuție al unui CAZ SIMPLU fără ALTE.

Caz simplu în SQL Server

Interogarea 2: CAZ SIMPLU cu opțiunea 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

Rezultat: Diagrama de mai jos explică fluxul de execuție al unui CAZ SIMPLU cu ELSE.

Caz simplu în SQL Server

S-a căutat CASE

Sintaxa pentru caz căutat

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]

Aici,

  • Parametrul Boolean_Expression_1, … denotă expresia care va fi evaluată pentru TRUE sau FALSE.
  • Parametrii Statement_1, Statement_2... denotă instrucțiunile care se vor executa dacă rezultatul corespunzător Boolean_Expression_1, Boolean_Expression_2 este TRUE.
  • Pe scurt, Condiția este Boolean_Expression_1,... și ACTION este execuția Statement_N dacă mai sus boolean_Expression_1 este TRUE.
  • ALIAS_NAME este opțional și este numele alias-ului dat rezultatului instrucțiunii CASE. Folosit mai ales atunci când folosim CASE în clauza select.

Reguli pentru cazul căutat

  • Spre deosebire de cazul simplu, Căutarea majusculelor nu se limitează doar la verificarea egalității, ci permite expresia booleană.
  • Expresia booleană este evaluată, în ordine pornind de la prima expresie booleană, adică, expresie_booleană_1. Mai jos este abordarea execuției:
    • Dacă expresia_booleană_1 este TRUE, atunci instrucțiunile WHEN…THEN suplimentare sunt omise, iar execuția CASE se va termina imediat.
    • Dacă Boolean_expression_1 este FALSE, atunci Boolean_expression_2 este evaluată pentru condiția TRUE. Acest proces de evaluare a expresiei_booleene va continua până când una dintre expresiile_booleane returnează TRUE.
    • Dacă nimic nu se potrivește, atunci controlul trece la instrucțiunea ELSE și Statement_Else va fi executat.
  • Ca și cazul simplu, ELSE este opțional și în cazul Căutării.
  • Dacă ELSE nu este prezent și nicio expresie booleană nu returnează TRUE, atunci va fi afișat Null.

Mai jos diagramă ilustrează fluxul de execuție al Caz căutat.

Funcționarea declarației cazului căutat

Funcționarea declarației cazului căutat

Exemple

Interogarea 1: CAZ CĂUTAT cu opțiunea 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

Rezultat: Diagrama de mai jos explică fluxul de execuție a CAZ CĂUTAT cu NU ALTUL.

Exemplu CASE căutat în SQL Server

Interogarea 2: CAZ CĂUTAT cu ELSE opțiune.

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

Rezultat: Diagrama de mai jos explică fluxul de execuție of CAZUL CAUTAT cu ALTE.

S-a căutat CASE în SQL Server

Diferența între abordarea execuției: SIMPLU și CAZUL CĂUTARE.

Să aruncăm o privire CAZ SIMPLU exemplu de mai jos:

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

Aici, „Nume_tutorial” este o parte a expresiei CASE în SQL. Apoi „Nume_tutorial” valoarea este comparată cu fiecare valorile CÂND, adică „SQL”… până când „Tutorial_name” se potrivește cu valorile WHEN.

Din contra, CAZARE CAZ exemplu nu are Expresia 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

Aici, fiecare declarația CÂND își are Expresie booleană condiționată. Fiecare Expresie booleană adică Tutorial_name = 'SQL',... este evaluat pentru ADEVARAT FALS până la primul boolean expresie care evaluează la TRUE.

Diferența dintre cazul simplu și cel căutat

Caz simplu Caz căutat
Cuvântul cheie CASE este urmat imediat de CASE_Expression și înainte de instrucțiunea WHEN.

De exemplu:
CAZ
WHEN Value_1 THEN Declarație_1...

Cuvântul cheie Case este urmat de instrucțiunea WHEN și nu există nicio expresie între CASE și WHEN.

De exemplu:
CAZ CÂND THEN Statement_1...

În cazuri simple, VALUE există pentru fiecare instrucțiune WHEN. Aceste valori: Value_1, Value_2... Sunt comparate secvenţial cu o singură CASE_Expression. Rezultatul este evaluat pentru condiția TRUE/FALSE pentru fiecare instrucțiune WHEN.

De exemplu:
CAZ
WHEN Value_1 THEN Declarație_1...
WHEN Value_2 THEN Declarație_2...

În cazul căutat, Boolean_Expression există pentru fiecare instrucțiune WHEN. Această boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,... evaluează condiția TRUE/FALSE pentru fiecare instrucțiune WHEN.

De exemplu:
CASE
CÂND THEN Statement_1...
CÂND THEN Statement_2...

Simple Case acceptă doar verificarea egalității. Adică dacă CASE_Expression = VALUE_1, VALUE_2...

De exemplu:
CAZ WHEN Value_1 THEN Statement_1... În exemplul de mai sus, singura operație efectuată de sistem este verificarea dacă Case_Expression = Value_1

Cu Boolean_Expression_N, Search Case acceptă orice operație care are ca rezultat o valoare booleană. Include operator egal și nu egal.

De exemplu:
CAZ CÂND THEN Statement_1... În exemplul de mai sus, Boolean_Expression_1 poate conține atât operatorul „egal cu”, cât și „nu este egal cu”, precum A = B, A != B.

CASE imbricat: CASE în IF ELSE

Putem folosi CAZ în interior DACĂ ALTE. Mai jos este exemplul de cod 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

În exemplul de mai sus, CASE este NESTED în instrucțiunea IF...ELSE:

În primul rând, IF Statement se va executa și if Case Condition in SQL Server este fals, atunci instrucțiunea ELSE se va executa.

Altfel conține instrucțiunea CASE imbricată în SQL. În funcție de valoarea biletului de avion, va fi afișat unul dintre următoarele rezultate:

  • Sistemul va imprima „Vizitează locația turistică din apropiere” dacă biletele de avion sunt > 400 USD
  • Sistemul va imprima „Vizitează Los Angeles” dacă biletele de avion sunt ÎNTRE 0 USD și 100 USD
  • Sistemul va imprima „Vizitează New York” dacă biletele de avion sunt ÎNTRE 101 USD și 200 USD
  • Sistemul va imprima „Vizitează Europa” dacă biletele de avion sunt ÎNTRE 201 USD ȘI 400 USD

CASE imbricate în SQL Server

CASE imbricate: CASE în interiorul CASE

Putem folosi CASE în interiorul CASE în SQL. Mai jos este exemplul de cod 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

În exemplul de mai sus, CASE este NESTED într-o altă instrucțiune CASE:

Sistemul începe cu executarea CAZULUI exterior. Dacă Flight_Ticket < 400 USD, se va executa CASE interior.

În funcție de valoarea biletului de avion, va fi afișat unul dintre următoarele rezultate:

  • Sistemul va imprima „Vizitează locația turistică din apropiere” dacă biletele de avion sunt > 400 USD
  • Sistemul va imprima „Vizitează Los Angeles” dacă biletele de avion sunt ÎNTRE 0 USD și 100 USD
  • Sistemul va imprima „Vizitează New York” dacă biletele de avion sunt ÎNTRE 101 USD și 200 USD
  • Sistemul va imprima „Vizitează Europa” dacă biletele de avion sunt ÎNTRE 201 USD ȘI 400 USD

Exemplu de CASE imbricate în SQL Server

CAZ cu UPDATE

Presupunere: Să presupunem că avem tabelul ca „Guru99” cu două coloane și patru rânduri, așa cum este afișat mai jos:

CAZ cu UPDATE în SQL Server

Vom folosi tabelul „Guru99” în alte exemple

Putem folosi CASE cu UPDATE. Mai jos este exemplul de cod 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
	)

În exemplul de mai sus, CASE este folosit în instrucțiunea UPDATE.

În funcție de Valoarea Tutorial_Name, coloana Tutorial_Name va primi actualizarea cu valoarea instrucțiunii THEN.

  • Dacă Tutorial_Name = 'SQL', atunci actualizați Tutorial_Name la 'Structured Query Language'
  • Dacă Tutorial_Name = 'PL/SQL', atunci actualizați Tutorial_Name la 'Oracle PL/SQL"
  • Dacă Tutorial_Name = 'MSSQL', atunci actualizați Tutorial_Name la 'Microsoft SQL'
  • Dacă Tutorial_Name = „Hadoop” ACTUA actualizați Tutorial_Name la „Apache Hadoop”

CAZ cu UPDATE în SQL Server

Să interogăm tabelul Guru99 pentru a verifica valoarea actualizată:

CAZ cu UPDATE în SQL Server

CAZ cu Comanda de

Putem folosi CASE cu Order By. Mai jos este exemplul de cod 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

Aici CASE este folosit cu Order By.

@Order este setat la 1 și ca prima CÂND expresia booleană este evaluată la TRUE, Tutorial_ID este selectat pentru Order by Condition

CASE cu Order by în SQL Server

Fapte interesante!

  • CASE poate fi imbricat într-un alt CAS, precum și într-o altă instrucțiune IF...ELSE.
  • Pe lângă SELECT, CASE poate fi folosit cu altul SQL clauză precum UPDATE, ORDER BY.

Rezumat

  • În MS SQL, există două tipuri de CASE: CASE simplu și CASE căutat
  • ELSE este opțional în instrucțiunea CASE.