Obecně řečeno, IF..ELSE je rozhodovací příkaz v různých programovacích jazycích. Příkaz IF se používá k provedení bloku kódu, pokud je splněna určitá podmínka. Pokud podmínka splněna není (FALSE), lze volitelně použít příkaz ELSE.
V případě SQL Serveru se příkaz IF používá k provedení příkazů SQL, pokud je podmínka TRUE.
Například:
1
2
3
4
5
6
7
|
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
|
V uvedeném kódu je @jméno_tabulky proměnnou. Pokud je této proměnné přiřazena hodnota “employees”, příkaz IF načte data z tabulky sto_employees. Pokud je hodnota proměnné jiná než “zaměstnanci”, podmínka IF se stane FALSE a provede se část ELSE.
Toto jednoduché použití vám ukážu v příkladech níže i s výstupem. V poslední části také vysvětlím, jak splnit účel “ELSE IF”, který v SQL Serveru není k dispozici.
Jednoduchý příklad použití příkazu IF bez ELSE
Začnu jednoduchým příkladem použití SQL příkazu IF. Budeme vyhodnocovat proměnnou typu int a zjišťovat její hodnotu. Pokud je podmínka TRUE, měl by příkaz IF vypsat příkaz.
Kód:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/*Deklarování proměnné*/
DECLARE @val_chk INT;
/*Přiřazení valye*/
SET @val_chk = 101;
/*Provedení příkazu IF*/
IF @val_chk = 101
PRINT ‘Příkaz IF je TRUE’;
GO
|
Výstup výše uvedeného kódu je:
“Příkaz IF je TRUE”
Jako taková je hodnota proměnné 101.
Co kdyby podmínka byla FALSE?
Pokud by výše uvedená podmínka byla FALSE, např. hodnota proměnné by byla jiná než 101, pak by se nic nestalo.
V reálném scénáři můžete chtít provést příkaz nebo nějakou akci, protože podmínka v příkazu IF je TRUE nebo FALSE.
Pro to použijte příkaz ELSE. Příkaz uvnitř příkazu ELSE se provede, pokud není splněna podmínka v příkazu IF.
Následující ukázka použití příkazu ELSE:
KÓD IF ELSE:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*Deklarování proměnné*/
DECLARE @val_chk INT;
/*Přiřazení valye*/
SET @val_chk = 50;
/*Provedení příkazu IF*/
IF @val_chk >= 101
PRINT ‘Příkaz IF je TRUE’;
ELSE
PRINT ‘Příkaz IF je PRAVDA’;
GO
|
Výstup výše uvedeného kódu je: “Příkaz IF je FALSE”, protože hodnota proměnné není větší nebo rovna 101.
Provedení příkazu SELECT na základě hodnoty VARCHAR
Nyní uvedu příklad použití řetězcové hodnoty v příkazu IF. Deklarujeme řetězcovou proměnnou a přiřadíme jí hodnotu.
V příkazech IF…ELSE zkontrolujeme hodnotu proměnné a provedeme příslušný příkaz SELECT. Podívejte se na to:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*Deklarování řetězcové proměnné*/
DECLARE @table_name VARCHAR(60);
/*Přiřazení hodnoty*/
SET @table_name = ’employees’;
/*Provedení příkazu IF*/
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
GO
|
Výstup výše uvedeného kódu je:
Co když máme více možností, které je třeba zkontrolovat? (NESTED IF)
Ve výše uvedených příkladech jsme měli pouze dvě možnosti. Buď je hodnota TRUE, nebo FALSE. Pokud je TRUE, provede se příkaz uvnitř IF, v opačném případě se provede část ELSE.
Řekněme, že v případě provádění příkazů SELECT potřebujeme zkontrolovat různé názvy tabulek a pro každou z nich provést příslušný příkaz SELECT; jak to tedy můžeme udělat?
Odpovědí je použití příkazu NESTED IF.
Příklad pokud je hodnota proměnné “zaměstnanci”, pak proveďte:
SELECT * FROM sto_zamestnanci;
Pokud je hodnota produkty, pak proveďte:
Vybrat * FROM sto_products;
Pro jakoukoli jinou hodnotu:
Vybrat * FROM sto_emp_salary_paid;
Podívejte se, jak je to převedeno do příkazů NESTED IF v SQL:
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
|
/*Deklarování řetězcové proměnné*/
DECLARE @table_name VARCHAR(60);
/*Přiřazení hodnoty*/
SET @table_name = ‘products’;
/*Provedení příkazu IF*/
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘products’
SELECT * FROM sto_products;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
GO
|
Vidíte, že uvnitř příkazu ELSE je použito klíčové slovo BEGIN, kde je umístěn další příkaz IF (vnořený IF). Ten je ukončen použitím klíčového slova END.
Tam jsme umístili další podmínku, kterou je třeba zkontrolovat. Vyzkoušejte různé hodnoty proměnné @jméno_tabulky podle vlastních názvů tabulek a nahraďte je i v příkazu SELECT, abyste si to sami vyzkoušeli.
Ještě jedna úroveň ve vnořeném příkazu IF
Jen pro ukázku toho, že se můžete vnořit do více úrovní, jsem postoupil dál pomocí dalšího vnořeného příkazu IF.
Takže scénář spočívá v kontrole hodnoty proměnné (jméno_tabulky). pokud je hodnota products, pak načtěte data z tabulky sto_products. Pokud je hodnota zaměstnanci, pak získejte záznamy z tabulky sto_zaměstnanci. Třetí příkaz if kontroluje, zda je hodnotou proměnné orders, pak získá záznamy z tabulky orders.
Nakonec příkaz ELSE pro jakoukoli jinou hodnotu proměnné by měl získat záznamy z tabulky vyplacených mezd zaměstnanců.
Podívejte se na vícenásobně vnořený příkaz IF pro tři podmínky 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
45
|
/*Deklarování řetězcové proměnné*/
DECLARE @table_name VARCHAR(60);
/*Přiřazení hodnoty*/
SET @table_name = ‘orders’;
/*Provedení příkazu IF*/
IF @table_name = ’employees’
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
|
Jak nastavím hodnotu proměnné jako orders, příkaz IF by měl vrátit záznamy z tabulky sto_orders.
V kódu vidíte, že třetí příkaz IF je spuštěn za druhým klíčovým slovem BEGIN.
Poznámka: Pokud chcete v příkazu SELECT použít podmíněné provedení, pak v SQL použijte příkaz CASE.
.