CASE utasítás és beágyazott eset az SQL Serverben: T-SQL példa
A Case áttekintése a való életben!
Ismétlem, a valós életben különböző cselekvéseket hajtunk végre a különböző feltételek kimenetelétől függően.
További részletekért tekintse meg az alábbi példát:
- Ha a repülőjegy 100 dollárnál kevesebb, akkor Los Angelesbe megyek.
- Ha a repülőjegyek 100 és 200 dollár között vannak, akkor New Yorkba megyek
- Ha a repülőjegyek 200 és 400 dollár között vannak, akkor felkeresem Európát
- Különben inkább meglátogatok valamilyen közeli turista helyet.
Tekintsük a Feltétel és a Művelet kategorizálását a fenti példától elkülönítve:
Feltételek – Repülőjegyek | Végrehajtott műveletek, csak akkor, ha a Feltétel TRUE |
Less mint 100 dollár | Látogasson el Los Angelesbe |
100 és 200 dollár között | Látogassa meg New Yorkot |
200 és 400 dollár között | Látogassa meg Európát |
A fenti feltételek egyike sem teljesült | Közeli turisztikai hely |
A fenti példában láthatjuk, hogy a különböző feltételek eredménye külön cselekvésre irányul. Például a Visitor csak abban az esetben hajtja végre a New York-i látogatást, ha a repülőjegy 100 és 200 dollár között van.
Hasonlóképpen, az MS SQL CASE utasítás arra is lehetőséget biztosít, hogy a különböző feltételek eredménye alapján különböző T-SQL utasításokat hajtson végre.
Mi az a CASE nyilatkozat az SQL Serverben?
CASE nyilatkozat az SQL Serverben az IF…ELSE utasítás kiterjesztése. Ellentétben az IF…ELSE-vel, ahol csak egy feltétel maximuma megengedett, a CASE lehetővé teszi a felhasználó számára, hogy több feltételt alkalmazzon az MS SQL különböző műveletcsoportjainak végrehajtásához. A felhasználó által meghatározott feltételhez tartozó megfelelő értéket adja vissza.
Tanuljuk meg a Case használatát SQL-ben és annak koncepcióját a következő szakaszokban.
In MS SQL, kétféle CASE létezik.
- Egyszerű CASE
- Keresett CASE
Egyszerű CASE
A Simple Case szintaxisa
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]
Itt,
- A paraméter Case_Expression azt a kifejezést jelöli, amelyhez végül hasonlítani fogunk Érték_1, Érték_2, ...
- A paraméterek Nyilatkozat_1, Nyilatkozat_2… jelöli azokat az utasításokat, amelyek végrehajtásra kerülnek, ha a Case_Expression = Érték_1, eset_kifejezés = Value_2, … és így tovább.
- Dióhéjban a feltétel az, hogy a Case_Expression = Value_N és ACTION az utasítás_N végrehajtása, ha a fenti eredmény IGAZ.
- FEDŐNÉV nem kötelező, és az SQL Server CASE utasítás eredményének adott álnév. Leggyakrabban akkor használatos, amikor a Case-t használjuk az SQL szerver kiválasztó záradékában.
Az egyszerű eset szabályai
- A Simple Case csak a Case_Expression egyenlőségellenőrzését teszi lehetővé, ahol az Érték_1 és az Érték_N.
- A Case_Expression összehasonlítása az Értékkel történik, az első értéktől kezdődő sorrendben, azaz Érték_1. Az alábbiakban bemutatjuk a végrehajtási megközelítést:
- Ha a Case_Expression ekvivalens az Érték_1 értékkel, akkor a további WHEN…THEN utasítások kimaradnak, és a CASE végrehajtása azonnal VÉGEZÉS.
- Ha a Case_Expression nem egyezik az Érték_1 értékkel, akkor a Case_Expressiont a rendszer összehasonlítja az Érték_2-vel az ekvivalencia érdekében. A Case_Expression és az Érték összehasonlításának folyamata mindaddig folytatódik, amíg a Case_Expression meg nem találja a megfelelő értéket az Érték_1, Érték_2,…
- Ha semmi sem egyezik, akkor a vezérlés az ELSE utasításba kerül, és a Statement_Else végrehajtásra kerül.
- Az ELSE nem kötelező.
- Ha az ELSE nincs jelen, és a Case_Expression egyik érték sem egyezik, akkor Null jelenik meg.
Az alábbi diagram a Simple Case végrehajtási folyamatát mutatja be.
Példák
Feltevés: Tételezzük fel, hogy a táblázat a következő "Guru99" két oszloppal és négy sorral az alábbiak szerint:
Használni fogjuk "Guru99" táblázat a további példákban
1. lekérdezés: EGYSZERŰ ESET a NINCS MÁS opcióval
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
Eredmény: Az alábbi diagram egy EGYSZERŰ ESET végrehajtási folyamatát magyarázza el NINCS MÁSSAL.
2. lekérdezés: EGYSZERŰ ESET az EGYÉB opcióval.
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
Eredmény: Az alábbi diagram bemutatja a SIMPLE CASE és az ELSE végrehajtási folyamatát.
Keresett CASE
A keresett eset szintaxisa
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]
Itt,
- A Boolean_Expression_1, … paraméter azt a kifejezést jelöli, amely IGAZ vagy FALSE értékre kerül kiértékelésre.
- Az Utasítás_1, Utasítás_2… paraméterek azokat az utasításokat jelölik, amelyek akkor futnak le, ha a megfelelő Logikai_kifejezés_1, Logikai_Kifejezés_2 eredménye IGAZ.
- Dióhéjban, a feltétel logikai_kifejezés_1, és az ACTION az utasítás_N végrehajtása, ha a fenti logikai_kifejezés_1 IGAZ.
- Az ALIAS_NAME nem kötelező, és a CASE utasítás eredményének adott álnév. Leggyakrabban akkor használatos, ha a CASE-t használjuk a kiválasztási záradékban.
A keresett eset szabályai
- Az egyszerű esettől eltérően a Keresett eset nem korlátozódik csak az egyenlőség ellenőrzésére, hanem lehetővé teszi a logikai kifejezést.
- A logikai kifejezés kiértékelése az első logikai kifejezéstől kezdődő sorrendben történik, azaz a logikai_kifejezés_1. Az alábbiakban bemutatjuk a végrehajtási megközelítést:
- Ha a logikai_kifejezés_1 értéke IGAZ, akkor a további WHEN…THEN utasítások kimaradnak, és a CASE végrehajtása azonnal VÉGEZÉS.
- Ha a logikai_kifejezés_1 értéke HAMIS, akkor a logikai_kifejezés_2 értéke IGAZ feltételre kerül. Ez a logikai_kifejezés értékelési folyamata mindaddig folytatódik, amíg az egyik logikai_kifejezés IGAZ értéket ad vissza.
- Ha semmi sem egyezik, akkor a vezérlés az ELSE utasításba kerül, és a Statement_Else végrehajtásra kerül.
- A Simple Case-hez hasonlóan az ELSE a Search case esetén is választható.
- Ha az ELSE nincs jelen, és a logikai_kifejezés egyike sem ad vissza IGAZ értéket, akkor Null jelenik meg.
Alábbi diagram illusztrálja a végrehajtási folyamatát Megkeresett ügy.
Példák
1. lekérdezés: KERESÉS ESET a NINCS MÁS opcióval
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
Eredmény: Az alábbi diagram elmagyarázza a végrehajtás folyamatát az KERESÉS ESET dolgoztam, ahol az NEM MÁS.
2. lekérdezés: KERESÉS ESET a ... val ELSE opciót.
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
Eredmény: Az alábbi diagram elmagyarázza a végrehajtás folyamatát of a KERETETT ESET dolgoztam, ahol az MÁS.
Különbség a végrehajtási megközelítés között: SIMPLE és SEARCH CASE.
Nézzük meg EGYSZERŰ ESET példa alább:
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
Itt, "Tutorial_name" a CASE kifejezés része az SQL-ben. Akkor "Tutorial_name" értékét mindegyikkel összehasonlítják WHEN értékek, azaz 'SQL'… amíg a 'Tutorial_name' nem egyezik a WHEN értékekkel.
Ezzel szemben KERESÉSI ESET példának nincs CASE kifejezés:
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
Itt mindegyik WHEN kijelentés megvan a Feltételes logikai kifejezés. Minden Logikai kifejezés ie Tutorial_name = 'SQL',… a következőre van kiértékelve IGAZ HAMIS -ig először Boolean kifejezés, amely kiértékeli TRUE.
Az egyszerű és a keresett eset közötti különbség
Egyszerű tok | Megkeresett ügy |
---|---|
A CASE kulcsszót közvetlenül a CASE_Expression követi és a WHEN utasítás előtt.
Például: |
A Case kulcsszót a WHEN utasítás követi, és nincs kifejezés a CASE és a WHEN között.
Például: |
Egyszerű eset esetén a VALUE minden WHEN utasításhoz létezik. A következő értékek: Érték_1, Érték_2… Egyetlen CASE_Expressionnal hasonlítják össze egymás után. Az eredmény kiértékeli az IGAZ/HAMIS feltételt minden WHEN utasításhoz.
Például: |
A keresett esetben a Boolean_Expression minden WHEN utasításhoz létezik. Ez a Logikai_kifejezések: Logikai_kifejezés_1, Logikai_kifejezés_2,… kiértékeli az IGAZ/HAMIS feltételt minden WHEN utasításhoz.
Például: |
A Simple Case csak az egyenlőség ellenőrzését támogatja. Vagyis a CASE_Expression = VALUE_1, VALUE_2…
Például: |
A Boolean_Expression_N esetén a Search Case minden olyan műveletet támogat, amely logikai értéket eredményez. Tartalmazza az egyenlő és nem egyenlő operátort.
Például: |
Beágyazott CASE: CASE az IF ELSE-ben
Tudjuk használni CASE belül HA MÁS. Az alábbiakban egy példa az MS-SQL kódra
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
A fenti példában a CASE az IF…ELSE utasításon belül BÉSZLELTETETT:
Először az IF-kimutatás fog végrehajtásra kerülni, és ha a Case Condition in SQL szerver ha hamis, akkor az ELSE utasítás végrehajtásra kerül.
Mások tartalmazzák a beágyazott CASE utasítást SQL-ben. A repülőjegy értékétől függően a következő eredmények egyike jelenik meg:
- A rendszer kinyomtatja a „Közeli turisztikai hely felkeresése” szöveget, ha a repülőjegyek ára > 400 USD
- A rendszer kinyomtatja a „Los Angeles látogatása” szöveget, ha a repülőjegy 0 és 100 USD KÖZÖTT
- A rendszer kinyomtatja a „Visit New York” feliratot, ha a repülőjegy 101 és 200 USD KÖZÖTT
- A rendszer kinyomtatja a „Visit Europe” feliratot, ha a repülőjegy 201 és 400 USD KÖZÖTT
Beágyazott CASE: CASE a CASE belsejében
Használhatjuk a CASE-t a CASE-en belül SQL-ben. Az alábbiakban egy példa az MS-SQL kódra
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
A fenti példában a CASE egy másik CASE utasításba van beágyazva:
A rendszer a külső CASE végrehajtásával kezdődik. Ha a Flight_Ticket < 400 USD, akkor a belső CASE végrehajtásra kerül.
A repülőjegy értékétől függően a következő eredmények egyike jelenik meg:
- A rendszer kinyomtatja a „Közeli turisztikai hely felkeresése” szöveget, ha a repülőjegyek ára > 400 USD
- A rendszer kinyomtatja a „Los Angeles látogatása” szöveget, ha a repülőjegy 0 és 100 USD KÖZÖTT
- A rendszer kinyomtatja a „Visit New York” feliratot, ha a repülőjegy 101 és 200 USD KÖZÖTT
- A rendszer kinyomtatja a „Visit Europe” feliratot, ha a repülőjegy 201 és 400 USD KÖZÖTT
CASE UPDATE
Feltételezés: Tegyük fel, hogy a táblázat „Guru99” néven áll rendelkezésre, két oszloppal és négy sorral, az alábbiak szerint:
A további példákban a 'Guru99' táblát fogjuk használni
A CASE-t használhatjuk az UPDATE funkcióval. Az alábbiakban egy példa az MS-SQL kódra:
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 )
A fenti példában a CASE használatos az UPDATE utasításban.
A Tutorial_Name értékétől függően a Tutorial_Name oszlop a THEN utasítás értékével kapja meg a frissítést.
- Ha Tutorial_Name = 'SQL', akkor frissítse a Tutorial_Name értéket 'Strukturált lekérdezési nyelvre'
- Ha Tutorial_Name = 'PL/SQL' AKKOR frissítse a Tutorial_Name értéket a következőreOracle PL/SQL'
- Ha Tutorial_Name = 'MSSQL' AKKOR frissítse a Tutorial_Name értéket a következőreMicrosoft SQL'
- Ha Tutorial_Name = "Hadoop", akkor frissítse a Tutorial_Name értéket "Apache Hadoop"-ra
Lekérdezzük a Guru99 táblát a frissített érték ellenőrzéséhez:
ESET Rendeléssel
A CASE-t a Rendelés szerint használhatjuk. Az alábbiakban egy példa az MS-SQL kódra:
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
Itt a CASE a Rendelés szerint használatos.
A @Rendelés értéke 1, és amikor az első logikai kifejezés IGAZ értéket vesz fel, a Tutorial_ID ki van választva a Rendezés feltétel szerint.
Érdekes tények!
- A CASE beágyazható egy másik CASE és egy másik IF…ELSE utasításba is.
- A SELECT mellett a CASE egy másikkal is használható SQL záradék, mint a UPDATE, ORDER BY.
Összegzésként
- Az MS SQL-ben kétféle CASE van: Simple CASE és Searched CASE
- Az ELSE nem kötelező a CASE utasításban.