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.

  1. Egyszerű CASE
  2. 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.

Az egyszerű esetleírás működése
Az egyszerű esetleírás működése

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:

Egyszerű eset az SQL Serverben

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.

Egyszerű eset az SQL Serverben

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.

Egyszerű eset az SQL Serverben

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.

A keresett eseti nyilatkozat feldolgozása

A keresett eseti nyilatkozat feldolgozása

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.

CASE példa keresve az SQL Serverben

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.

CASE keresése az SQL Serverben

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:
ÜGY
WHEN Érték_1 THEN utasítás_1…

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:
ESET MIKOR AKKOR nyilatkozat_1…

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:
ÜGY
WHEN Érték_1 THEN utasítás_1…
WHEN Érték_2 THEN utasítás_2…

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:
CASE
AMIKOR AKKOR nyilatkozat_1…
AMIKOR AKKOR nyilatkozat_2…

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:
ÜGY WHEN Érték_1 THEN Utasítás_1…A fenti példában a rendszer egyetlen művelete annak ellenőrzése, hogy Case_Expression = Érték_1

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:
ESET MIKOR THEN Utasítás_1… A fenti példában a logikai_kifejezés_1 tartalmazhatja az „egyenlő” és a „nem egyenlő” operátort is, például A = B, A != B.

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 az SQL Serverben

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

Beágyazott CASE példa az SQL Serverben

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:

CASE UPDATE-vel az SQL Serverben

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

CASE UPDATE-vel az SQL Serverben

Lekérdezzük a Guru99 táblát a frissített érték ellenőrzéséhez:

CASE UPDATE-vel az SQL Serverben

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.

CASE az SQL Server rendelése alapján

É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.