CASE Statement & Nested Case i SQL Server: T-SQL Eksempel
Oversikt over Case i det virkelige liv!
Igjen, i det virkelige liv utfører vi forskjellige handlinger avhengig av utfallet av forskjellige forhold.
For å utdype mer, vurder eksemplet nedenfor:
- Hvis flybillettene er mindre enn $100, vil jeg besøke Los Angeles.
- Hvis flybillettene er mellom $100 til $200, så vil jeg besøke New York
- Hvis flybillettene er mellom $200 og $400, så vil jeg besøke Europa
- Ellers vil jeg foretrekke å besøke et turiststed i nærheten.
La oss vurdere å kategorisere tilstand og handling separat fra eksemplet ovenfor nedenfor:
Betingelser – Flybilletter | Handlinger utført, bare hvis betingelse er TRUE |
Less enn $ 100 | Besøk Los Angeles |
Mellom $ 100 til $ 200 | Besøk New York |
Mellom $ 200 til $ 400 | Besøk Europa |
Ingen av vilkårene ovenfor oppfylte | Nærliggende turiststed |
I eksemplet ovenfor kan vi se at utfallet av de forskjellige forholdene styrer separat handling. For eksempel vil Visitor utføre handlingen å besøke New York bare i den tilstanden hvis flybilletten er mellom $100 og $200.
På samme måte gir MS SQL CASE-setningen også muligheten til å iverksette tiltak for å utføre forskjellige T-SQL-setninger basert på utfallet av forskjellige forhold.
Hva er CASE Statement i SQL Server?
CASE-uttalelse i SQL Server er utvidelsen av IF…ELSE-setningen. I motsetning til IF…ELSE, hvor kun maksimalt én betingelse er tillatt, lar CASE brukeren bruke flere betingelser for å utføre forskjellige sett med handlinger i MS SQL. Den returnerer en tilsvarende verdi knyttet til betingelsen definert av brukeren.
La oss lære hvordan du bruker Case i SQL og konseptet i de følgende avsnittene.
In MS SQL, det er to typer CASE.
- Enkel CASE
- Søkte i CASE
Enkel 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 uttrykket som vi til slutt vil bli sammenlignet med Verdi_1, Verdi_2, ...
- Parametrene Statement_1, Statement_2… angir erklæringene som vil bli utført hvis Case_Expression = Verdi_1, Kasusuttrykk = Verdi_2, … og så videre.
- I et nøtteskall, den tilstand er om Case_Expression = Value_N og ACTION er utførelsen av Statement_N hvis resultatet ovenfor er SANN.
- ALIAS_NAME er valgfritt og er aliasnavnet gitt til SQL Server CASE-setningsresultatet. Brukes mest når vi bruker Case i SQL server select-klausul.
Regler for enkel sak
- Simple Case tillater bare likhetssjekk av Case_Expression med Value_1 til Value_N.
- Case_Expression sammenlignes med Value, i rekkefølge fra den første verdien, dvs. Value_1. Nedenfor er utførelsesmetoden:
- Hvis Case_Expression er ekvivalent med Value_1, hoppes ytterligere WHEN...THEN-setninger over, og CASE-kjøringen AVSLUTERES umiddelbart.
- Hvis Case_Expression ikke samsvarer med Value_1, sammenlignes Case_Expression med Value_2 for ekvivalens. Denne prosessen med å sammenligne Case_Expression med Value vil fortsette til Case_Expression finner tilsvarende ekvivalent verdi fra settet Value_1, Value_2,...
- Hvis ingenting samsvarer, går kontrollen til ELSE-setningen, og Statement_Else vil bli utført.
- ANDET er valgfritt.
- Hvis ELSE ikke er tilstede og Case_Expression samsvarer med ingen av verdiene, da Null vil vises.
Diagrammet nedenfor illustrerer utførelsesflyten til Simple Case.
Eksempler
Antagelse: Anta at vi har tabellen som 'Guru99' med to kolonner og fire rader som vist nedenfor:
Vi vil bruke 'Guru99' tabell i ytterligere eksempler
Spørsmål 1: ENKEL CASE med NO ELSE-alternativet
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: Diagrammet nedenfor forklarer utførelsesflyten til en ENKEL CASE uten noe annet.
Spørsmål 2: ENKEL CASE med alternativet 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
Resultat: Diagrammet nedenfor forklarer utførelsesflyten til en ENKEL CASE med ELSE.
Søkte i CASE
Syntaksen for søkt sak
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, …angir uttrykket som vil bli evaluert for TRUE eller FALSE.
- Parametrene Statement_1, Statement_2... angir setningene som vil utføres hvis dets tilsvarende Boolean_Expression_1, Boolean_Expression_2-resultatet er TRUE.
- I et nøtteskall er Condition Boolean_Expression_1,... og ACTION er utførelsen av Statement_N hvis over boolean_Expression_1 er TRUE.
- ALIAS_NAME er valgfritt og er aliasnavnet gitt til CASE-setningsresultatet. Mest brukt når vi bruker CASE i select-klausulen.
Regler for søkt sak
- I motsetning til det enkle tilfellet, er Searched Case ikke begrenset til bare likhetskontroll, men tillater boolsk uttrykk.
- Det boolske uttrykket evalueres i rekkefølge fra det første boolske uttrykket, dvs. boolsk_uttrykk_1. Nedenfor er utførelsesmetoden:
- Hvis Boolean_expression_1 er TRUE, hoppes ytterligere WHEN…THEN-setninger over, og CASE-kjøringen AVSLUTERES umiddelbart.
- Hvis Boolean_expression_1 er FALSE, blir Boolean_expression_2 evaluert for TRUE-tilstand. Denne prosessen med å vurdere boolsk_uttrykk vil fortsette til en av boolsk uttrykk returnerer TRUE.
- Hvis ingenting samsvarer, går kontrollen til ELSE-setningen, og Statement_Else vil bli utført.
- Like Simple Case ELSE er også valgfritt i Search-case.
- Hvis ELSE ikke er tilstede og ingen av Boolean_expression returnerer TRUE, vil Null vises.
Diagram under illustrere utførelsesflyten til Søkte i Case.
Eksempler
Spørsmål 1: SØKT SAKS med alternativet 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
Resultat: Nedenfor diagram forklarer utførelsesflyten av SØKT SAK med INGEN ANNET.
Spørsmål 2: SØKT CASE med ELSE alternativet.
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: Nedenfor diagram forklarer utførelsesflyten of den søkte saken med ELLERS.
Forskjellen mellom utførelsestilnærming: ENKEL og SØKECASE.
La oss ta en titt 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 av CASE-uttrykk i SQL. Da 'Tutorial_name' verdien sammenlignes med hver NÅR verdier, dvs. 'SQL'... til 'Tutorial_name' samsvarer med WHEN-verdier.
Tvert imot, SØKESAK eksempel har nei CASE-uttrykk:
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-uttalelse har sitt Betinget boolsk uttrykk. hver enkelt boolsk uttrykk dvs. Tutorial_name = 'SQL',... er evaluert for SANN/USANT til første boolske uttrykk som evaluerer til TRUE.
Forskjellen mellom enkel og søkt sak
Enkel sak | Søkte i Case |
---|---|
CASE-nøkkelordet blir umiddelbart etterfulgt av CASE_Expression og før WHEN-setningen.
Eg: |
Saksøkeord etterfølges av WHEN-setningen, og det er ikke noe uttrykk mellom CASE og WHEN.
Eg: |
I enkle tilfeller eksisterer VALUE for hver WHEN-setning. Disse verdiene: Value_1, Value_2… Sammenlignes med enkelt CASE_Expression sekvensielt. Resultatet blir evaluert for SANN/USANN-tilstanden for hver NÅR-utsagn.
Eg: |
I Searched Case eksisterer Boolean_Expression for hver WHEN-setning. Dette Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,... evaluerer TRUE/FALSE-betingelsen for hvert WHEN-utsagn.
Eg: |
Simple Case-støtte kun likestillingssjekk. Dvs om CASE_Expression = VALUE_1, VALUE_2...
Eg: |
Med Boolean_Expression_N støtter Search Case enhver operasjon som resulterer i en boolsk verdi. Det inkluderer lik og ikke lik operatør.
Eg: |
Nestet CASE: CASE i IF ELSE
Vi kan bruke CASE inni HVIS ANNET. Nedenfor er eksempelet 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 eksemplet ovenfor er CASE NESTED i IF…ELSE-setningen:
Først vil IF-erklæringen utføres og hvis sakstilstanden er i SQL-server er falsk, vil ELSE-setningen kjøres.
Ellers inneholder Nested CASE Statement i SQL inne i den. Avhengig av flybillettverdien, vil ett av følgende resultater vises:
- Systemet vil skrive ut "Besøk nærliggende turiststed" hvis flybillettene er > $400
- Systemet vil skrive ut "Visit Los Angeles" hvis flybillettene er MELLOM $0 OG $100
- Systemet vil skrive ut "Besøk New York" hvis flybillettene er MELLOM $101 OG $200
- Systemet vil skrive ut "Visit Europe" hvis flybillettene er MELLOM $201 OG $400
Nestet CASE: CASE inni CASE
Vi kan bruke CASE inne i CASE i SQL. Nedenfor er eksempelet 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 eksemplet ovenfor er CASE NESTED i en annen CASE-setning:
Systemet starter med å utføre den ytre CASE. Hvis Flight_Ticket < $400 vil inner CASE kjøres.
Avhengig av flybillettverdien, vil ett av følgende resultater vises:
- Systemet vil skrive ut "Besøk nærliggende turiststed" hvis flybillettene er > $400
- Systemet vil skrive ut "Visit Los Angeles" hvis flybillettene er MELLOM $0 OG $100
- Systemet vil skrive ut "Besøk New York" hvis flybillettene er MELLOM $101 OG $200
- Systemet vil skrive ut "Visit Europe" hvis flybillettene er MELLOM $201 OG $400
CASE med OPPDATERING
Forutsetning: Anta at vi har tabellen som 'Guru99' med to kolonner og fire rader som vist nedenfor:
Vi vil bruke 'Guru99'-tabellen i ytterligere eksempler
Vi kan bruke CASE med UPDATE. Nedenfor er eksempelet 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 eksemplet ovenfor brukes CASE i UPDATE-setningen.
Avhengig av Tutorial_Name Value, vil Tutorial_Name-kolonnen få oppdateringen med THEN Statement-verdi.
- Hvis Tutorial_Name = 'SQL' SÅ oppdater Tutorial_Name til 'Structured Query language'
- Hvis Tutorial_Name = 'PL/SQL' SÅ oppdater Tutorial_Name til 'Oracle PL/SQL'
- Hvis Tutorial_Name = 'MSSQL' SÅ oppdater Tutorial_Name til 'Microsoft SQL'
- Hvis Tutorial_Name = 'Hadoop' SÅ oppdater Tutorial_Name til 'Apache Hadoop'
La oss spørre Guru99-tabellen for å sjekke den oppdaterte verdien:
CASE med Bestill etter
Vi kan bruke CASE med Order By. Nedenfor er eksempelet 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 brukes CASE med Order By.
@Order er satt til 1 og som først NÅR det boolske uttrykket evalueres til TRUE, velges Tutorial_ID for Order by Condition
Interessante fakta!
- CASE kan nestes i en annen CASE så vel som i en annen IF…ELSE-setning.
- I tillegg til SELECT kan CASE brukes med en annen SQL klausul som UPDATE, ORDER BY.
Sammendrag
- I MS SQL er det to typer CASE: Simple CASE og Searched CASE
- ANDET er valgfritt i CASE-setningen.