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.
- Simpel CASE
- 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.
Eksempler
Antagelse: Antag, at vi har tabellen som 'Guru99' med to kolonner og fire rækker som vist nedenfor:
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.
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.
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.
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.
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.
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: |
Sagsøgeord efterfølges af WHEN-sætningen, og der er intet udtryk mellem CASE og WHEN.
F.eks: |
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: |
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: |
Simple Case understøtter kun ligestillingskontrol. Dvs om CASE_Expression = VALUE_1, VALUE_2...
F.eks: |
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: |
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: 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
CASE med OPDATERING
Antagelse: Antag, at vi har tabellen som 'Guru99' med to kolonner og fire rækker som vist nedenfor:
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'
Lad os forespørge Guru99-tabellen for at kontrollere den opdaterede værdi:
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
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.