CASE-lauseke ja sisäkkäinen tapaus SQL Serverissä: T-SQL-esimerkki

Yleiskatsaus Case tosielämään!

Todellisuudessakin suoritamme erilaisia ​​toimia eri olosuhteiden tuloksen mukaan.

Jos haluat tarkentaa, harkitse alla olevaa esimerkkiä:

  • Jos lentoliput ovat alle 100 dollaria, vierailen Los Angelesissa.
  • Jos lentoliput ovat 100–200 dollaria, vierailen New Yorkissa
  • Jos lentoliput ovat 200–400 dollaria, vierailen Euroopassa
  • Muuten käyn mieluummin jossain lähellä olevassa turistikohteessa.

Harkitsemme tilan ja toiminnan luokittelua erillään alla olevasta yllä olevasta esimerkistä:

Ehdot - lentoliput Toimenpiteet suoritettu, vain jos kunto on TOSI
Less yli 100 dollaria Vieraile Los Angelesissa
Välillä $ 100 dollaria 200 Vieraile New Yorkissa
Välillä $ 200 dollaria 400 Vieraile Euroopassa
Mikään yllä olevista ehdoista ei täyttynyt Läheinen turistikohde

Yllä olevassa esimerkissä voimme nähdä, että eri ehtojen tulos hallitsee erillistä toimintaa. Esim. Vierailija suorittaa New Yorkissa vierailun vain siinä kunnossa, että lentolippu on 100–200 dollaria.

Vastaavasti MS SQL CASE -käsky tarjoaa myös mahdollisuuden suorittaa erilaisia ​​T-SQL-käskyjä eri ehtojen tulosten perusteella.

Mikä on CASE-lauseke SQL Serverissä?

CASE-selostus SQL Serverissä on IF…ELSE-lauseen laajennus. Toisin kuin IF…ELSE, jossa vain yksi ehto on sallittu, CASE sallii käyttäjän soveltaa useita ehtoja erilaisten toimintojoukkojen suorittamiseen MS SQL:ssä. Se palauttaa vastaavan arvon, joka liittyy käyttäjän määrittelemään ehtoon.

Opitaan käyttämään Casea SQL:ssä ja sen konseptia seuraavissa osissa.

In MS SQL, on olemassa kahta tyyppiä CASE.

  1. Yksinkertainen CASE
  2. Etsittiin CASE

Yksinkertainen CASE

Simple Casen syntaksi

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]

Täällä

  • Parametri Case_Expression tarkoittaa ilmaisua, johon meitä lopulta verrataan Arvo_1, Arvo_2,…
  • Parametrit Lausunto_1, Lausunto_2… tarkoittaa lauseita, jotka suoritetaan, jos Case_Expression = Arvo_1, tapaus_lauseke = Arvo_2, … ja niin edelleen.
  • Pähkinänkuoressa, ehto on tapaus_lauseke = Arvo_N ja ACTION ovat lausekkeen_N suoritus, jos yllä oleva tulos on TOSI.
  • ALIAS NIMI on valinnainen ja se on SQL Server CASE -käskyn tulokselle annettu aliasnimi. Useimmiten käytetään, kun käytämme Casea SQL-palvelimen valintalausekkeessa.

Yksinkertaisen tapauksen säännöt

  • Yksinkertainen tapaus sallii vain tapauslausekkeen yhtäläisyyden tarkistuksen arvolla Arvo_1 arvoon_N.
  • Case_Expression verrataan arvoon järjestyksessä alkaen ensimmäisestä arvosta, eli Arvo_1. Alla on toteutustapa:
  • Jos Case_Expression vastaa arvoa_1, muut WHEN…THEN-käskyt ohitetaan ja CASE-suoritus PÄÄTTYY välittömästi.
  • Jos tapauslauseke ei vastaa arvoa_1, tapauslauseketta verrataan arvoon_2 vastaavuuden vuoksi. Tämä tapauslausekkeen ja arvon vertaaminen jatkuu, kunnes Case_Expression löytää vastaavan vastaavan arvon joukosta Arvo_1, Arvo_2,…
  • Jos mikään ei täsmää, ohjaus siirtyy ELSE-käskyyn, ja lauseke_Else suoritetaan.
  • ELSE on valinnainen.
  • Jos ELSE ei ole läsnä ja Case_Expression ei vastaa yhtään arvoa, niin Null tulee näkyviin.

Alla oleva kaavio havainnollistaa Simple Casen suorituskulkua.

Yksinkertaisen tapausselvityksen toiminta
Yksinkertaisen tapausselvityksen toiminta

Esimerkit

Oletus: Oletetaan, että meillä on taulukko muodossa "Guru99" kahdella sarakkeella ja neljällä rivillä alla olevan kuvan mukaisesti:

Yksinkertainen tapaus SQL Serverissä

Käytämme "Guru99" taulukko muissa esimerkeissä

Kysymys 1: YKSINKERTAINEN TAPAUS EI MUUTA -vaihtoehdolla

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

Tulos: Alla olevassa kaaviossa selitetään SIMPLE CASE ilman muuta suorituskulkua.

Yksinkertainen tapaus SQL Serverissä

Kysely 2: YKSINKERTAINEN TAPAUS MUU-vaihtoehdolla.

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

Tulos: Alla oleva kaavio selittää SIMPLE CASE:n suorittamisen ELSE:n kanssa.

Yksinkertainen tapaus SQL Serverissä

Etsittiin CASE

Haetun tapauksen syntaksi

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]

Täällä

  • Parametri Boolen_lauseke_1, …merkitsee lauseketta, jonka arvoksi arvioidaan TOSI tai EPÄTOSI.
  • Parametrit Lauseke_1, Lauseke_2… osoittavat lauseita, jotka suoritetaan, jos sitä vastaava Boolen_lauseke_1, Boolen_lauseke_2 tulos on TOSI.
  • Lyhyesti sanottuna ehto on Boolen_Expression_1,… ja ACTION on lausekkeen_N suoritus, jos edellä oleva Boolen_Expression_1 on TOSI.
  • ALIAS_NAME on valinnainen ja se on CASE-käskyn tulokselle annettu aliasnimi. Useimmiten käytetään, kun käytämme valintalauseessa CASE.

Etsityn tapauksen säännöt

  • Toisin kuin yksinkertainen tapaus, Haettu tapaus ei rajoitu vain yhtäläisyyden tarkistukseen, vaan se sallii Boolen lausekkeen.
  • Boolen lauseke arvioidaan järjestyksessä alkaen ensimmäisestä Boolen lausekkeesta eli Boolen_lauseke_1. Alla on toteutustapa:
    • Jos Boolen_lauseke_1 on TOSI, seuraavat WHEN…THEN-lauseet ohitetaan ja CASE-suoritus PÄÄTTYY välittömästi.
    • Jos Boolen_lauseke_1 on EPÄTOSI, Boolen_lauseke_2 arvioidaan ehdon TOSI. Tämä Boolen_lausekkeen arviointiprosessi jatkuu, kunnes jokin Boolen_lausekkeesta palauttaa TOSI.
    • Jos mikään ei täsmää, ohjaus siirtyy ELSE-käskyyn, ja lauseke_Else suoritetaan.
  • Like Simple Case ELSE on valinnainen myös hakutapauksessa.
  • Jos ELSE ei ole läsnä eikä mikään Boolen_lausekkeesta palauta TOSI, näyttöön tulee Null.

Alla Kaavio havainnollistaa suorituskulkua Haettu tapaus.

Tutkitun tapauslausunnon käsittely

Tutkitun tapauslausunnon käsittely

Esimerkit

Kysely 1: HAETTU TAPAUS EI MUUTA -vaihtoehdolla

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

Tulos: Alla kaavio selittää suorituksen kulkua että HAETTU TAPAUS with EI MUUTA.

Haettu CASE-esimerkkiä SQL Serveristä

Kysely 2: HAETTU TAPAUS jossa ELSE vaihtoehto.

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

Tulos: Alla kaavio selittää suorituksen kulkua of HAETTU TAPAUS with MUU.

Haettu CASE SQL Serveristä

Ero suoritustavan välillä: SIMPLE ja SEARCH CASE.

Katsotaanpa YKSINKERTAINEN TAPAUS esimerkki alla:

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

Täällä "Tutorial_name" on osa CASE-lauseketta SQL:ssä. Sitten "Tutorial_name" arvoa verrataan kuhunkin Kun arvot, eli SQL… kunnes 'Tutorial_name' vastaa WHEN-arvoja.

Päinvastoin, HAKU TAPAUS esimerkillä ei ole CASE-ilmaisu:

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

Tässä jokainen WHEN-lause on sen Ehdollinen Boolen lauseke. kukin Boolen lauseke eli Tutorial_name = 'SQL',… on arvioitu TOSI/EPÄTOSI asti ensimmäinen Boolean lauseke, joka arvioi arvoon TOSI.

Ero yksinkertaisen ja haetun tapauksen välillä

Yksinkertainen kotelo Haettu tapaus
CASE-avainsanaa seuraa välittömästi CASE_Expression ja ennen WHEN-lausetta.

Esim:
CASE
WHEN Arvo_1 THEN Lauseke_1…

Case-avainsanaa seuraa WHEN-lause, eikä CASE- ja WHEN-välillä ole lauseketta.

Esim:
TAPAUS KUN SIIN lausunto_1…

Yksinkertaisessa tapauksessa VALUE on olemassa jokaiselle WHEN-käskylle. Näitä arvoja: Arvo_1, Arvo_2… Verrataan yksittäiseen CASE_Expression-lauseeseen peräkkäin. Tulos saa arvion TOSI/EPÄTOSI -ehdon suhteen jokaiselle WHEN-lausekkeelle.

Esim:
CASE
WHEN Arvo_1 THEN Lauseke_1…
WHEN Arvo_2 THEN Lauseke_2…

Haetussa tapauksessa Boolean_Expression on olemassa jokaiselle WHEN-käskylle. Tämä Boolen_lausekkeet: Boolen_lauseke_1, Boolen_lauseke_2,… arvioi kunkin WHEN-lausekkeen TOSI/EPÄTOSI-ehdon.

Esim:
CASE
KUN SIIN lausunto_1…
KUN SIIN lausunto_2…

Simple Case tukee vain tasa-arvon tarkistusta. Eli onko CASE_Expression = VALUE_1, VALUE_2…

Esim:
CASE WHEN Arvo_1 THEN Lauseke_1…Yllä olevassa esimerkissä järjestelmän ainoa toiminto on tarkistaa, onko tapaus_lauseke = arvo_1

Boolen_Expression_N:n avulla Search Case tukee kaikkia toimintoja, jotka johtavat Boolen arvoon. Se sisältää yhtä kuin operaattorin.

Esim:
TAPAUS KUN THEN Lauseke_1… Yllä olevassa esimerkissä Boolen_lauseke_1 voi sisältää sekä 'sama kuin' ja 'ei yhtä suuri' -operaattorin, kuten A = B, A != B.

Sisäkkäinen CASE: CASE kohdassa IF ELSE

Voimme käyttää CASE sisällä JOS MUUTA. Alla on esimerkki MS-SQL-koodista

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

Yllä olevassa esimerkissä CASE on NESTED IF…ELSE-käskyn sisällä:

Ensinnäkin IF-lausunto suoritetaan ja jos tapauksen ehto sisään SQL-palvelin on False, ELSE-lause suoritetaan.

Muut sisältävät sisäkkäisen CASE-lausekkeen SQL:ssä. Lentolipun arvosta riippuen yksi seuraavista tuloksista näytetään:

  • Jos lentoliput ovat yli 400 dollaria, järjestelmä tulostaa "Visit Nearby Tourist Location".
  • Järjestelmä tulostaa "Visit Los Angeles", jos lentoliput ovat 0 - 100 $
  • Järjestelmä tulostaa "Visit New York", jos lentoliput ovat 101 - 200 $
  • Järjestelmä tulostaa "Visit Europe", jos lentoliput ovat 201 - 400 $

Sisäkkäinen CASE SQL Serverissä

Sisäkkäinen CASE: CASE CASE:n sisällä

Voimme käyttää CASEa CASE:n sisällä SQL:ssä. Alla on esimerkki MS-SQL-koodista

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

Yllä olevassa esimerkissä CASE on NESTED toisen CASE-käskyn sisällä:

Järjestelmä aloittaa ulkoisen CASE:n suorittamisen. Jos Flight_Ticket < 400 dollaria, sisäinen CASE suoritetaan.

Lentolipun arvosta riippuen yksi seuraavista tuloksista näytetään:

  • Jos lentoliput ovat yli 400 dollaria, järjestelmä tulostaa "Visit Nearby Tourist Location".
  • Järjestelmä tulostaa "Visit Los Angeles", jos lentoliput ovat 0 - 100 $
  • Järjestelmä tulostaa "Visit New York", jos lentoliput ovat 101 - 200 $
  • Järjestelmä tulostaa "Visit Europe", jos lentoliput ovat 201 - 400 $

Sisäkkäinen CASE-esimerkki SQL Serverissä

TAPAUS PÄIVITYKSEN kanssa

Oletus: Oletetaan, että meillä on taulukko "Guru99", jossa on kaksi saraketta ja neljä riviä, kuten alla näytetään:

CASE päivityksen kanssa SQL Serverissä

Käytämme 'Guru99'-taulukkoa muissa esimerkeissä

Voimme käyttää CASEa UPDATE:n kanssa. Alla on esimerkki MS-SQL-koodista:

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
	)

Yllä olevassa esimerkissä CASEa käytetään UPDATE-käskyssä.

Tutorial_Name-arvosta riippuen Tutorial_Name-sarake saa päivityksen THEN-lausekkeen arvolla.

  • Jos Tutorial_Name = 'SQL', päivitä Tutorial_Name kieleksi "Structured Query Language"
  • Jos Tutorial_Name = 'PL/SQL', päivitä Tutorial_Name arvoon 'Oracle PL/SQL'
  • Jos Tutorial_Name = 'MSSQL', päivitä Tutorial_Name muotoon 'Microsoft SQL'
  • Jos Tutorial_Name = 'Hadoop', päivitä Tutorial_Name muotoon 'Apache Hadoop'

CASE päivityksen kanssa SQL Serverissä

Tarkastetaan päivitetty arvo Guru99-taulukosta:

CASE päivityksen kanssa SQL Serverissä

TAPAUS tilauksella

Voimme käyttää CASEa tilausperusteella. Alla on esimerkki MS-SQL-koodista:

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

Tässä CASEa käytetään tilausperusteen kanssa.

@Order asetetaan arvoon 1 ja kun ensimmäinen Boolen lauseke laskee arvoon TOSI, Tutorial_ID valitaan Tilaa ehdon mukaan

CASE tilauksen mukaan SQL Serverissä

Mielenkiintoisia seikkoja!

  • CASE voidaan upottaa toiseen CASE- tai toiseen IF…ELSE-käskyyn.
  • SELECT:n lisäksi CASE:ta voidaan käyttää toisen kanssa SQL lauseke kuten UPDATE, ORDER BY.

Yhteenveto

  • MS SQL:ssä on kahta tyyppiä CASE: Simple CASE ja Searched CASE
  • ELSE on valinnainen CASE-käskyssä.