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.
- Lihtne KOHTU
- 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.
Näited
Eeldus: Oletame, et meil on tabel kujul "Guru99" kahe veeru ja nelja reaga, nagu allpool näidatud:
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.
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.
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.
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.
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.
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: |
Märksõnale Case järgneb lause WHEN ning CASE ja WHEN vahel pole väljendit.
Nt: |
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: |
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: |
Simple Case toetab ainult võrdsuse kontrolli. St kas CASE_Expression = VALUE_1, VALUE_2…
Nt: |
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: |
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 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
KOHTUUR koos VÄRSKENDUSEGA
Eeldus: oletame, et meil on tabel Guru99 kahe veeru ja nelja reaga, nagu allpool näidatud:
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"
Värskendatud väärtuse kontrollimiseks küsime Guru99 tabelit:
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
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.