CASE Statement & Nested Case i SQL Server: T-SQL Eksempel

Oversigt over Case i det virkelige liv!

Igen, i det virkelige liv udfører vi forskellige handlinger afhængigt af resultatet af forskellige forhold.

For at uddybe mere, overvej følgende eksempel:

  • Hvis flybilletter er mindre end $100, så vil jeg besøge Los Angeles.
  • Hvis flybilletter er mellem $100 og $200, så vil jeg besøge New York
  • Hvis flybilletter er mellem $200 og $400, så vil jeg besøge Europa
  • Ellers vil jeg foretrække at besøge et nærliggende turiststed.

Lad os overveje at kategorisere tilstand og handling separat fra ovenstående eksempel nedenfor:

Betingelser - Flybilletter Handlinger udført, kun hvis Tilstand er TRUE
Less end $ 100 Besøg Los Angeles
Mellem $ 100 til $ 200 Besøg New York
Mellem $ 200 til $ 400 Besøg Europa
Ingen af ​​ovenstående betingelser opfyldt Nærliggende turiststed

I ovenstående eksempel kan vi se, at resultatet af de forskellige forhold er styrende for særskilte handlinger. F.eks. vil Visitor kun udføre handlingen at besøge New York i den tilstand, hvis flybilletten er mellem $100 og $200.

På samme måde giver MS SQL CASE-sætning også mulighed for at tage handling for at udføre forskellige T-SQL-sætninger baseret på resultatet af forskellige forhold.

Hvad er CASE Statement i SQL Server?

CASE-erklæring i SQL Server er en forlængelse af IF…ELSE-sætningen. I modsætning til IF…ELSE, hvor kun det maksimale af én betingelse er tilladt, tillader CASE brugeren at anvende flere betingelser for at udføre forskellige sæt handlinger i MS SQL. Det returnerer en tilsvarende værdi forbundet med den betingelse, som er defineret af brugeren.

Lad os lære at bruge Case i SQL og dets koncept i de følgende afsnit.

In MSSQL, er der to typer CASE.

  1. Simpel CASE
  2. Søgte CASE

Simpel CASE

Syntaksen for Simple Case

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]

Her,

  • Parameteren Case_Expression betegner det udtryk, som vi til sidst vil blive sammenlignet med Værdi_1, Værdi_2, ...
  • Parametrene Udsagn_1, Udsagn_2… angive de erklæringer, der vil blive udført, hvis Case_Expression = Værdi_1, Case_Expression = Værdi_2, … og så videre.
  • I en nøddeskal betingelse er om Case_Expression = Value_N og ACTION er udførelsen af ​​Statement_N, hvis ovenstående resultat er SAND.
  • ALIAS_NAME er valgfri og er aliasnavnet givet til SQL Server CASE-sætningsresultatet. Mest brugt, når vi bruger Case i SQL-servervalgsklausul.

Regler for Simple Case

  • Simple Case tillader kun lighedskontrol af Case_Expression med Value_1 til Value_N.
  • Case_Expression sammenlignes med Value, i rækkefølge fra den første værdi, dvs. Value_1. Nedenfor er udførelsesmetoden:
  • Hvis Case_Expression er ækvivalent med Value_1, så springes yderligere WHEN...THEN-sætninger over, og CASE-eksekveringen SLUTTER med det samme.
  • Hvis Case_Expression ikke stemmer overens med Value_1, sammenlignes Case_Expression med Value_2 for ækvivalens. Denne proces med at sammenligne Case_Expression med Value vil fortsætte, indtil Case_Expression finder en tilsvarende ækvivalent værdi fra sættet Value_1, Value_2,...
  • Hvis intet matcher, går kontrollen til ELSE-sætningen, og Statement_Else vil blive eksekveret.
  • ANDET er valgfrit.
  • Hvis ELSE ikke er til stede, og Case_Expression matcher med ingen af ​​værdierne, så Null vil blive vist.

Nedenstående diagram illustrerer udførelsen af ​​Simple Case.

Working of Simple Case Statement
Working of Simple Case Statement

Eksempler

Antagelse: Antag, at vi har tabellen som 'Guru99' med to kolonner og fire rækker som vist nedenfor:

Simple Case i SQL Server

Vi vil bruge 'Guru99' tabel i yderligere eksempler

Forespørgsel 1: ENKEL TILFÆLDE med indstillingen INGEN ANDET

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

Resultat: Nedenstående diagram forklarer udførelsesflowet af en SIMPEL CASE uden ANDET.

Simple Case i SQL Server

Forespørgsel 2: ENKEL TILFÆLDE med ANDET-indstillingen.

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

Resultat: Nedenstående diagram forklarer udførelsesflowet af en SIMPLE CASE med ELSE.

Simple Case i SQL Server

Søgte CASE

Syntaksen for søgte sager

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]

Her,

  • Parameteren Boolean_Expression_1, … angiver det udtryk, som vil blive evalueret for SAND eller FALSK.
  • Parametrene Statement_1, Statement_2… angiver de sætninger, som vil udføres, hvis dets tilsvarende Boolean_Expression_1, Boolean_Expression_2 resultat er TRUE.
  • I en nøddeskal er Condition Boolean_Expression_1,... og ACTION er udførelsen af ​​Statement_N, hvis ovenstående boolean_Expression_1 er TRUE.
  • ALIAS_NAME er valgfri og er aliasnavnet givet til CASE-sætningsresultatet. Bruges mest, når vi bruger CASE i select-klausulen.

Regler for søgt sag

  • I modsætning til det simple tilfælde er søgt sag ikke begrænset til kun lighedskontrol, men tillader boolesk udtryk.
  • Det boolske udtryk evalueres i rækkefølge fra det første boolske udtryk, dvs. boolsk_udtryk_1. Nedenfor er udførelsesmetoden:
    • Hvis Boolean_expression_1 er TRUE, så springes yderligere WHEN…THEN-sætninger over, og CASE-udførelse afsluttes med det samme.
    • Hvis Boolean_expression_1 er FALSE, så evalueres Boolean_expression_2 for SAND tilstand. Denne proces med at vurdere Boolean_expression vil fortsætte, indtil et af de Boolean_expression returnerer TRUE.
    • Hvis intet matcher, går kontrollen til ELSE-sætningen, og Statement_Else vil blive eksekveret.
  • Like Simple Case ELSE er også valgfrit i Search case.
  • Hvis ELSE ikke er til stede, og ingen af ​​Boolean_expression returnerer TRUE, vil Null blive vist.

Nedenstående diagram illustrere udførelsesflowet af Søgte Case.

Working of Searched Case Statement

Working of Searched Case Statement

Eksempler

Forespørgsel 1: SØGNET CASE med INGEN ANDET-indstilling

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

Resultat: Nedenstående diagram forklarer udførelsesforløbet af SØGTE SAG med INGEN ANDEN.

Søgte CASE eksempel i SQL Server

Forespørgsel 2: SØGNET CASE med ELSE valgmulighed.

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

Resultat: Nedenstående diagram forklarer udførelsesforløbet of den SØGTE SAG med ANDET.

Søgte CASE i SQL Server

Forskel mellem eksekveringstilgang: SIMPLE og SEARCH CASE.

Lad os se på ENKEL CASE eksempel nedenfor:

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

Her, 'Tutorial_name' er en del af CASE-udtryk i SQL. Derefter 'Tutorial_name' værdi sammenlignes med hver NÅR værdier, dvs. 'SQL'... indtil 'Tutorial_name' matcher WHEN-værdierne.

Tværtimod, SØG CASE eksempel har nej CASE-udtryk:

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

Her hver NÅR erklæring har sin Betinget boolesk udtryk. Hver boolesk udtryk dvs. Tutorial_name = 'SQL',... evalueres for SANDT FALSK indtil første boolesk udtryk som evaluerer til TRUE.

Forskellen mellem simpel og søgt sag

Enkel sag Søgte Case
CASE søgeord efterfølges umiddelbart af CASE_Expression og før WHEN-sætning.

F.eks:
SAG
NÅR Værdi_1 SÅ Udsagn_1...

Sagsøgeord efterfølges af WHEN-sætningen, og der er intet udtryk mellem CASE og WHEN.

F.eks:
TILFÆLDE HVORNÅR SÅ Statement_1...

I simple tilfælde eksisterer VALUE for hver WHEN-sætning. Disse værdier: Value_1, Value_2… Sammenlignes med enkelt CASE_Expression sekventielt. Resultatet bliver evalueret for SAND/FALSK betingelse for hver NÅR-udsagn.

F.eks:
SAG
NÅR Værdi_1 SÅ Udsagn_1...
NÅR Værdi_2 SÅ Udsagn_2...

I søgte tilfælde findes Boolean_Expression for hver WHEN-sætning. Dette Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,... evaluerer TRUE/FALSE-betingelsen for hvert WHEN-udsagn.

F.eks:
CASE
HVORNÅR SÅ Statement_1...
HVORNÅR SÅ Statement_2...

Simple Case understøtter kun ligestillingskontrol. Dvs om CASE_Expression = VALUE_1, VALUE_2...

F.eks:
CASE WHEN Value_1 THEN Statement_1...I ovenstående eksempel er den eneste handling, der udføres af systemet, at kontrollere, om Case_Expression = Value_1

Med Boolean_Expression_N understøtter Search Case enhver handling, der resulterer i en boolesk værdi. Det inkluderer lige og ikke lig med operatør.

F.eks:
TILFÆLDE HVORNÅR THEN Statement_1... I ovenstående eksempel kan Boolean_Expression_1 indeholde både 'lig med' og 'ikke lig med' operator som A = B, A != B.

Indlejret CASE: CASE i HVIS ANDET

Vi kan bruge CASE inde HVIS ANDET. Nedenfor er eksemplet på MS-SQL-koden

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

I ovenstående eksempel er CASE NESTEDT inde i IF…ELSE-sætningen:

For det første vil IF-erklæringen blive eksekveret, og hvis sagstilstanden er i SQL-server er falsk, vil ELSE-sætningen blive udført.

Ellers indeholder indlejret CASE-sætning i SQL inde i den. Afhængigt af flybillettens værdi vil et af følgende resultater blive vist:

  • Systemet udskriver 'Besøg nærliggende turiststed', hvis flybilletter er > $400
  • Systemet vil udskrive 'Visit Los Angeles', hvis flybilletter er MELLEM $0 OG $100
  • Systemet vil udskrive 'Visit New York', hvis flybilletter er MELLEM $101 OG $200
  • Systemet vil udskrive 'Visit Europe', hvis flybilletter er MELLEM $201 OG $400

Indlejret CASE i SQL Server

Indlejret CASE: CASE inde i CASE

Vi kan bruge CASE inde i CASE i SQL. Nedenfor er eksemplet på MS-SQL-koden

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

I ovenstående eksempel er CASE NESTED i en anden CASE-sætning:

Systemet starter med at udføre den ydre CASE. Hvis Flight_Ticket < $400, vil indre CASE køre.

Afhængigt af flybillettens værdi vil et af følgende resultater blive vist:

  • Systemet udskriver 'Besøg nærliggende turiststed', hvis flybilletter er > $400
  • Systemet vil udskrive 'Visit Los Angeles', hvis flybilletter er MELLEM $0 OG $100
  • Systemet vil udskrive 'Visit New York', hvis flybilletter er MELLEM $101 OG $200
  • Systemet vil udskrive 'Visit Europe', hvis flybilletter er MELLEM $201 OG $400

Indlejret CASE-eksempel i SQL Server

CASE med OPDATERING

Antagelse: Antag, at vi har tabellen som 'Guru99' med to kolonner og fire rækker som vist nedenfor:

CASE med OPDATERING i SQL Server

Vi vil bruge 'Guru99'-tabellen i yderligere eksempler

Vi kan bruge CASE med UPDATE. Nedenfor er eksemplet på MS-SQL-koden:

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
	)

I ovenstående eksempel bruges CASE i UPDATE-sætningen.

Afhængigt af Tutorial_Name Value, vil Tutorial_Name kolonnen få opdateringen med THEN Statement værdi.

  • Hvis Tutorial_Name = 'SQL' SÅ opdater Tutorial_Name til 'Structured Query language'
  • Hvis Tutorial_Name = 'PL/SQL' SÅ opdater Tutorial_Name til 'Oracle PL/SQL'
  • Hvis Tutorial_Name = 'MSSQL' SÅ opdater Tutorial_Name til 'Microsoft SQL'
  • Hvis Tutorial_Name = 'Hadoop' SÅ opdater Tutorial_Name til 'Apache Hadoop'

CASE med OPDATERING i SQL Server

Lad os forespørge Guru99-tabellen for at kontrollere den opdaterede værdi:

CASE med OPDATERING i SQL Server

CASE med Bestil efter

Vi kan bruge CASE med Order By. Nedenfor er eksemplet på MS-SQL-koden:

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

Her bruges CASE med Order By.

@Order er sat til 1, og som først, NÅR det booleske udtryk evalueres til TRUE, vælges Tutorial_ID for Order by Condition

CASE med Order by i SQL Server

Interessante fakta!

  • CASE kan indlejres i en anden CASE såvel som i en anden IF…ELSE-sætning.
  • Ud over SELECT kan CASE bruges sammen med en anden SQL klausul som UPDATE, ORDER BY.

Resumé

  • I MS SQL er der to typer CASE: Simple CASE og Searched CASE
  • ANDET er valgfrit i CASE-sætningen.