CASE avaldus ja pesastatud juhtum SQL Serveris: T-SQL näide

Ülevaade Case'ist päriselus!

Jällegi, päriselus teeme me erinevaid toiminguid sõltuvalt erinevate tingimuste tulemusest.

Täpsema ülevaate saamiseks vaadake allolevat näidet:

  • Kui lennupiletid on alla 100 dollari, siis külastan Los Angelest.
  • Kui lennupiletid jäävad 100–200 dollari vahele, siis külastan New Yorki
  • Kui lennupiletid jäävad 200–400 dollari vahele, siis külastan Euroopat
  • Muidu eelistan külastada mõnda lähedalasuvat turismikohta.

Vaatleme tingimuse ja toimingu liigitamist ülaltoodud näitest eraldi:

Tingimused – Lennupiletid Tehtud toimingud, ainult siis, kui Tingimus on TRUE
Less kui 100 dollarit Külastage Los Angelest
Vahemikus 100 kuni 200 dollarit Külastage New Yorki
Vahemikus 200 kuni 400 dollarit Külastage Euroopat
Ükski ülaltoodud tingimustest ei vastanud Lähedal asuv turismikoht

Ülaltoodud näites näeme, et erinevate tingimuste tulemus reguleerib eraldi tegevust. Näiteks külastab Külastaja New Yorki ainult juhul, kui lennupilet on vahemikus $ 100 kuni $ 200.

Samamoodi annab MS SQL CASE avaldus ka võimaluse käivitada erinevaid T-SQL-lauseid erinevate tingimuste tulemusel.

Mis on CASE avaldus SQL Serveris?

CASE avaldus SQL Serveris on lause IF…ELSE laiend. Erinevalt IF…ELSE-st, kus on lubatud ainult üks tingimus, võimaldab CASE kasutajal rakendada MS SQL-is erinevate toimingute komplektide sooritamiseks mitut tingimust. See tagastab vastava väärtuse, mis on seotud kasutaja määratud tingimusega.

Järgmistes jaotistes õpime kasutama Case SQL-is ja selle kontseptsiooni.

In MS SQL, on kahte tüüpi CASE.

  1. Lihtne KOHTU
  2. Otsis CASE

Lihtne KOHTU

Simple Case süntaks

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]

Siin

  • Parameeter Case_Expression tähistab väljendit, millega meid lõpuks võrreldakse Väärtus_1, Väärtus_2, ...
  • Parameetrid Avaldus_1, avaldus_2… tähistab avaldusi, mis täidetakse juhul, kui Case_Expression = Väärtus_1, Case_Expression = Väärtus_2, … ja nii edasi.
  • Lühidalt, seisund on kas Case_Expression = Väärtus_N ja ACTION on väljavõtte_N täitmine, kui ülaltoodud tulemus on TÕENE.
  • ALIAS_NAME on valikuline ja on SQL Serveri CASE-lause tulemusele antud pseudonüümi nimi. Enamasti kasutatakse juhul, kui kasutame SQL-serveri valikuklauslit Case.

Lihtjuhtumi reeglid

  • Lihtsuurtähe võimaldab ainult võrdsuse kontrolli juhtumi_avaldises väärtusega_1 väärtusega_N.
  • Case_Expression võrreldakse väärtusega Väärtusega järjekorras, alustades esimesest väärtusest, st Väärtus_1. Allpool on täitmisviis:
  • Kui Case_Expression on samaväärne väärtusega Väärtus_1, jäetakse edasised WHEN…THEN-laused vahele ja CASE täitmine LÕPPEB kohe.
  • Kui Case_Expression ei ühti väärtusega Väärtus_1, võrreldakse juhtumi_avaldist samaväärsuse saamiseks väärtusega_2. See protsess Case_Expression ja Value võrdlemiseks jätkub seni, kuni Case_Expression leiab vastava samaväärse väärtuse komplektist Väärtus_1, Väärtus_2,…
  • Kui midagi ei ühti, läheb juhtimine ELSE-lausele ja avaldus_Else käivitatakse.
  • ELSE on valikuline.
  • Kui ELSE puudub ja Case_Expression ei ühti ühegi väärtusega, siis Null kuvatakse.

Allolev diagramm illustreerib Simple Case täitmisvoogu.

Lihtsa juhtumi kirjelduse toimimine
Lihtsa juhtumi kirjelduse toimimine

Näited

Eeldus: Oletame, et meil on tabel kujul "Guru99" kahe veeru ja nelja reaga, nagu allpool näidatud:

Lihtne juhtum SQL Serveris

Me kasutame "Guru99" tabel järgmistes näidetes

1. päring: LIHTNE JUHT, valikuga EI MUUD

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

Tulemus: Allolev diagramm selgitab LIHTSE JUHTUMI täitmisvoogu ilma MUUD EI OLE.

Lihtne juhtum SQL Serveris

Päring 2: LIHTNE KÜSIMUS suvandiga MUU.

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

Tulemus: Allolev diagramm selgitab SIMPLE CASE koos ELSE täitmisvoogu.

Lihtne juhtum SQL Serveris

Otsis CASE

Otsitud käände süntaks

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]

Siin

  • Parameeter Boolean_Expression_1, …tähistab avaldist, mille väärtus on TRUE või FALSE.
  • Parameetrid Avaldus_1, Avaldus_2… tähistavad avaldusi, mis käivitatakse, kui sellele vastav Boolean_Expression_1, Boolean_Expression_2 tulemus on TÕENE.
  • Lühidalt, tingimus on Boolean_Expression_1,… ja ACTION on lause_N täitmine, kui ülaltoodud Boolean_Expression_1 on TRUE.
  • ALIAS_NAME on valikuline ja see on CASE-lause tulemusele antud pseudonüümi nimi. Kasutatakse enamasti siis, kui kasutame valikuklauslis CASE.

Otsitava juhtumi reeglid

  • Erinevalt lihtsast juhtumist ei piirdu otsitud juhtum ainult võrdsuse kontrolliga, vaid võimaldab Boole'i ​​väljendit.
  • Boole'i ​​avaldist hinnatakse järjekorras, alustades esimesest Boole'i ​​avaldisest, st Boole'i_avaldis_1. Allpool on täitmisviis:
    • Kui Booleani_avaldis_1 on TRUE, jäetakse edasised WHEN…THEN-laused vahele ja CASE täitmine LÕPPEB kohe.
    • Kui Boolean_avaldis_1 on VÄÄR, siis hinnatakse Boolean_avaldis_2 tingimust TÕENE. See Boolean_avaldise hindamise protsess jätkub seni, kuni üks Boolean_avaldistest tagastab TRUE.
    • Kui midagi ei ühti, läheb juhtimine ELSE-lausele ja avaldus_Else käivitatakse.
  • Nagu Simple Case, on ELSE valikuline ka otsingu puhul.
  • Kui ELSE pole olemas ja ükski Boolean_avaldis ei tagasta TRUE, kuvatakse Null.

Allpool diagramm illustreerivad täitmisvoogu Otsitud juhtum.

Läbiotsitud juhtumi avalduse töötamine

Läbiotsitud juhtumi avalduse töötamine

Näited

1. päring: OTSITUD JUHTUMID valikuga EI MUUD

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

Tulemus: Allpool diagramm selgitab täitmise voogu Euroopa OTSITUD KOHTU koos EI MUUD.

SQL Serveris otsiti näidet CASE

2. päring: OTSITUD JUHTUM koos VEEL valik.

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

Tulemus: Allpool diagramm selgitab täitmise voogu of OTSITUD JUHTUM koos MUUD.

Otsiti SQL serverist CASE

Erinevus täitmisviiside vahel: LIHTNE ja OTSINGUjuhtum.

Vaatame üle LIHTNE KOHTU näide allpool:

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

Siin 'Tutorial_name' on SQL-i CASE-avaldise osa. Siis 'Tutorial_name' väärtust võrreldakse igaühega MILLAL väärtused, st 'SQL'… kuni 'Tutorial_name' ühtib WHEN väärtustega.

Vastupidi, OTSI KOHTU näitel puudub CASE Väljend:

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

Siin, igaüks MILLAL avaldus on oma Tingimuslik Boole'i ​​avaldis. Tk Boole'i ​​väljend st Tutorial_name = 'SQL',… on hinnatud TÕENE/VALE kuni esimene Boolean väljend, mis hindab TRUE.

Erinevus lihtsa ja otsitava juhtumi vahel

Lihtne ümbris Otsitud juhtum
Märksõnale CASE järgneb kohe CASE_Expression ja enne WHEN lauset.

Nt:
KOHTUASI
WHEN Väärtus_1 SIIS avaldus_1…

Märksõnale Case järgneb lause WHEN ning CASE ja WHEN vahel pole väljendit.

Nt:
JUHTUM, MILLAL SIIS avaldus_1…

Lihtjuhtumi korral on VALUE iga WHEN-lause jaoks olemas. Väärtused: Väärtus_1, Väärtus_2… Võrreldakse järjestikku ühe CASE_Expressioniga. Tulemust hinnatakse iga WHEN-lause tingimuse TRUE/FALSE jaoks.

Nt:
KOHTUASI
WHEN Väärtus_1 SIIS avaldus_1…
WHEN Väärtus_2 SIIS avaldus_2…

Otsitava juhtumi puhul on Boolean_Expression iga WHEN-lause jaoks olemas. See Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,… hindab iga WHEN-lause tingimust TRUE/FALSE.

Nt:
CASE
MILLAL SIIS avaldus_1…
MILLAL SIIS avaldus_2…

Simple Case toetab ainult võrdsuse kontrolli. St kas CASE_Expression = VALUE_1, VALUE_2…

Nt:
KOHTUASI WHEN väärtus_1 THEN avaldus_1… Ülaltoodud näites on süsteemi ainus toiming kontrollimine, kas Case_Expression = Value_1

Boolean_Expression_N abil toetab Search Case kõiki toiminguid, mille tulemuseks on Boolean väärtus. See hõlmab võrdset ja mitte võrdset operaatorit.

Nt:
JUHTUM KUI THEN Statement_1… Ülaltoodud näites võib Boolean_Expression_1 sisaldada nii operaatorit 'võrdne' kui ka 'mitte võrdne', näiteks A = B, A != B.

Pesastatud CASE: CASE in IF ELSE

Meil on võimalik kasutada KOHTU sees, KUI MUU. Allpool on MS-SQL koodi näide

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

Ülaltoodud näites on CASE pesastatud lauses IF…ELSE:

Esiteks täidetakse IF-i väljavõte ja juhul, kui juhtumi seisukord on sisse lülitatud SQL-server on Väär, siis käivitatakse ELSE lause.

Muidu sisaldavad SQL-is pesastatud CASE avaldust. Sõltuvalt lennupileti väärtusest kuvatakse üks järgmistest tulemustest:

  • Kui lennupiletid on > 400 $, prindib süsteem välja „Külastage lähedalasuvat turisti asukohta”.
  • Kui lennupiletite hind on 0–100 USD, prindib süsteem teksti „Külastage Los Angeles“.
  • Süsteem prindib "Külastage New Yorki", kui lennupiletid on 101–200 $
  • Süsteem prindib "Külastage Euroopat", kui lennupiletite hind on 201–400 dollarit

Pesastatud CASE SQL Serveris

Pesastatud KORRAL: KÜSIMUS KOHTA sees

SQL-is saame kasutada CASE-i CASE-i sees. Allpool on MS-SQL koodi näide

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

Ülaltoodud näites on CASE NESTED teises CASE-lauses:

Süsteem alustab välise CASE-i käivitamisega. Kui Flight_Ticket < 400 $, käivitub sisemine CASE.

Sõltuvalt lennupileti väärtusest kuvatakse üks järgmistest tulemustest:

  • Kui lennupiletid on > 400 $, prindib süsteem välja „Külastage lähedalasuvat turisti asukohta”.
  • Kui lennupiletite hind on 0–100 USD, prindib süsteem teksti „Külastage Los Angeles“.
  • Süsteem prindib "Külastage New Yorki", kui lennupiletid on 101–200 $
  • Süsteem prindib "Külastage Euroopat", kui lennupiletite hind on 201–400 dollarit

Pesastatud CASE näide SQL Serveris

KOHTUUR koos VÄRSKENDUSEGA

Eeldus: oletame, et meil on tabel Guru99 kahe veeru ja nelja reaga, nagu allpool näidatud:

CASE koos VÄRSKENDUSEGA SQL Serveris

Edasistes näidetes kasutame tabelit 'Guru99'

Saame kasutada CASE-i koos UPDATE. Allpool on MS-SQL koodi näide:

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
	)

Ülaltoodud näites kasutatakse UPDATE lauses CASE.

Olenevalt Tutorial_Name väärtusest saab veerg Tutorial_Name värskenduse THEN Statementi väärtusega.

  • Kui Tutorial_Name = 'SQL', SIIS värskendage Tutorial_Name 'Struktureeritud päringu keeleks'
  • Kui Tutorial_Name = 'PL/SQL' SIIS värskendage Tutorial_Name väärtuseks "Oracle PL/SQL'
  • Kui Tutorial_Name = 'MSSQL' SIIS värskendage Tutorial_Name väärtuseks "Microsoft SQL'
  • Kui Tutorial_Name = "Hadoop", SIIS värskendage Tutorial_Name väärtuseks "Apache Hadoop"

CASE koos VÄRSKENDUSEGA SQL Serveris

Värskendatud väärtuse kontrollimiseks küsime Guru99 tabelit:

CASE koos VÄRSKENDUSEGA SQL Serveris

KOHTU tellimisel

Saame kasutada CASE-i koos Tellimuse alusel. Allpool on MS-SQL koodi näide:

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

Siin kasutatakse CASE-t koos Tellimispõhimõttega.

@Order on seatud väärtusele 1 ja kui esimene Boole'i ​​avaldis hindab väärtuseks TRUE, valitakse Tutorial_ID väärtuseks Järjesta tingimuse järgi

CASE koos Tellimise järgi SQL Serveris

Huvitavaid fakte!

  • CASE saab pesastada nii teise CASE kui ka teise IF…ELSE lausesse.
  • Lisaks SELECT-le saab CASE-i kasutada ka teisega SQL klausel nagu UPDATE, ORDER BY.

kokkuvõte

  • MS SQL-is on kahte tüüpi CASE: Simple CASE ja Searched CASE
  • ELSE on CASE-lauses valikuline.