MSQL SQL Serverin IF..ELSE-lauseet

Yleisesti ottaen IF..ELSE on päätöksentekolause eri ohjelmointikielissä. IF-lauseen avulla suoritetaan koodilohko, jos jokin ehto täyttyy. Jos ehto ei täyty (FALSE), voidaan käyttää valinnaisesti ELSE-lauseketta.

SQL Serverin tapauksessa IF-lauseketta käytetään SQL-lauseen suorittamiseen, jos ehto on TRUE.

Esim:

7
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;

Yllä olevassa koodissa @table_name on muuttuja. Jos tälle muuttujalle annetaan arvo “employees”, IF-lause hakee tiedot taulusta sto_employees. Jos muuttujan arvo on jokin muu kuin “employee”, IF-ehdosta tulee FALSE ja ELSE-osa suoritetaan.

Näytän tämän yksinkertaisen käytön alla olevissa esimerkeissä tulosteineen. Viimeisessä osassa selitän myös, miten täytetään “ELSE IF” -tarkoitus, joka ei ole käytettävissä SQL Serverissä.

Yksinkertainen esimerkki IF-lausekkeen käytöstä ilman ELSE-lauseketta

Aloitan yksinkertaisella esimerkillä IF SQL-lauseen käytöstä. Arvioimme int-tyyppisen muuttujan tarkistaaksemme sen arvon. Jos ehto on TRUE, IF-lauseen pitäisi tulostaa lauseke.

Koodi:

1
2
3
4
5
6
19
20
21

/*Muuttujan ilmoittaminen*/
DECLARE @val_chk INT;
/*Muuttujan osoittaminen*/
SET @val_chk = 101;
/*Jos-lausekkeen suorittaminen*/
IF @val_chk = 101
PRINT ‘JOS-lauseke on TODENNÄKÖINEN’;
GO

Yllä olevan koodin tuloste on:

“IF-lause on TRUE”

Muuttujan arvo on siis 101.

Mitä jos ehto olisi VÄÄRÄ?

Jos yllä oleva ehto olisi VÄÄRÄ, esim. muuttujan arvo olisi muu kuin 101, mitään ei tapahtuisi.

Todellisessa skenaariossa saatetaan haluta suorittaa jokin lauseke tai suorittaa jokin toiminto, koska IF-lauseen ehto on TOSI tai VÄÄRÄ.

Tässä käytetään ELSE-lauseen käyttöä. ELSE-lauseen sisällä oleva lauseke suoritetaan, jos IF-lauseen ehto ei täyty.

Katso alla oleva demo ELSE-lauseen käytöstä:

JOS ELSE KOODI:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

/*Muuttujan ilmoittaminen*/
DECLARE @val_chk INT;
/*Muuttujan osoittaminen*/
SET @val_chk = 50;
/*Jos-lausekkeen suorittaminen*/
IF @val_chk >= 101
PRINT ‘JOS-lauseke on TODELLINEN’;
ELSE
PRINT ‘The IF statement is FLASE’;
GO

Ylläolevan koodin tuloste on: “IF-lause on FALSE”, koska muuttujan arvo ei ole suurempi tai yhtä suuri kuin 101.

SELECT-lauseen suorittaminen VARCHAR-arvon perusteella

Nyt näytän esimerkin merkkijonon arvon käyttämisestä IF-lauseessa. Merkkijonomuuttuja julistetaan ja sille annetaan arvo.

Jos…ELSE-lauseissa tarkistetaan muuttujan arvo ja suoritetaan vastaava SELECT-lause. Tutustu tähän:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

/*Jousimuuttujan julistaminen*/
DECLARE @table_name VARCHAR(60);
/*Arvon antaminen*/
SET @taulukon_nimi = ‘työntekijät’;
/*Jos-lausekkeen suorittaminen*/
IF @taulukon_nimi = ‘työntekijät’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
GO

Yllä olevan koodin tuloste on:

SQL IF ELSE

Mitä jos meillä on useita tarkistettavia vaihtoehtoja? (NESTED IF)

Yllä olevissa esimerkeissä meillä oli vain kaksi vaihtoehtoa. Joko arvo on TRUE tai FALSE. Jos TRUE, IF:n sisällä oleva lauseke suoritetaan, muutoin ELSE-osa suoritetaan.

Jos kyseessä on SELECT-lausekkeiden suorittaminen, sanotaan, että haluamme tarkistaa eri taulukoiden nimet ja suorittaa kullekin vastaavan SELECT-lausekkeen; miten voimme tehdä sen?

Vastaus on NESTED IF -lausekkeen käyttö.

Jos esimerkiksi muuttujan arvo on ’employees’, suoritetaan:

SELECT * FROM sto_employees;

Jos arvo on products, suoritetaan:

SELECT * FROM sto_products;

Mikä tahansa muu arvo:

SELECT * FROM sto_emp_salary_paid;

Katsokaa, miten tämä käännetään SQL:ssä NESTED IF -lauseiksi:

1
2
3
4
5
6
7
8
9
10
25
26
27
28
29
30
31
32
33

/*Jousimuuttujan julistaminen*/
DECLARE @table_name VARCHAR(60);
/*Arvon antaminen*/
SET @taulukon_nimi = ‘tuotteet’;
/*Jos-lausekkeen suorittaminen*/
IF @taulukon_nimi = ‘työntekijät’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘products’
SELECT * FROM sto_products;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
GO

Voit huomata, että ELSE-lausekkeen sisällä käytetään BEGIN-avainsanaa, johon on sijoitettu toinen IF-lauseke (sisäkkäinen IF). Tämä lopetetaan käyttämällä END-avainsanaa.

Siihen sijoitettiin toinen tarkistettava ehto. Kokeile @table_name-muuttujan eri arvoja omilla taulukkonimilläsi ja korvaa ne myös SELECT-lausekkeessa, jotta voit kokea sen itse.

Menee toiselle tasolle NESTED IF -lausekkeessa

Näyttääkseni, että voit pesiä monelle tasolle, menen vielä pidemmälle käyttämällä toista sisäkkäistä IF-lauseen lauseketta.

Skenaariossa siis tarkistetaan muuttujan arvo (taulukkonimellä). jos arvo on products, niin haetaan dataa taulusta sto_products. Jos arvo on employees, niin haetaan sto_employees-tietueet. Kolmannella if-lausekkeella tarkistetaan, jos muuttujan arvo on tilaukset, niin haetaan tietueet tilaukset-taulusta.

Viimeiseksi ELSE-lausekkeella, jos muuttujan arvo on jokin muu, pitäisi saada tietueet työntekijän palkka maksettu -taulusta.

Katso useita sisäkkäisiä IF-lausekkeita kolmelle ehdolle plus ELSE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
44
45

/*Seuraavan muuttujan ilmoittaminen*/
DECLARE @taulukon_nimi VARCHAR(60);
/*Arvon antaminen*/
SET @taulukon_nimi = ’tilaukset’;
/*Jos-lausekkeen suorittaminen*/
IF @taulukon_nimi = ‘työntekijät’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘products’
SELECT * FROM sto_products;
ELSE
BEGIN
IF @table_name = ‘orders’
SELECT * FROM sto_orders;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
END ;
GO

Koska asetan muuttujan arvoksi tilaukset, IF-lauseen pitäisi palauttaa tietueet sto_orders-taulusta.

Koodissa näkyy, että kolmas IF-lause aloitetaan toisen BEGIN-avainsanan jälkeen.

Huomautus: Jos haluat käyttää ehdollista suoritusta SELECT-lauseessa, käytä SQL:ssä CASE-laitetta.

Vastaa

Sähköpostiosoitettasi ei julkaista.