In het algemeen is de IF..ELSE een beslissingsstatement in verschillende programmeertalen. Het IF statement wordt gebruikt om een blok code uit te voeren als aan een voorwaarde is voldaan. Als aan een voorwaarde niet is voldaan (FALSE) dan kan optioneel het ELSE statement worden gebruikt.
In het geval van SQL Server, wordt het IF statement gebruikt om SQL statements uit te voeren als een voorwaarde TRUE is.
Voorbeeld:
1
2
3
4
5
6
7
|
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
|
In de bovenstaande code is de @table_name een variabele. Indien aan deze variabele de waarde “employees” wordt toegekend, zal de IF-instructie de gegevens uit de tabel sto_employees ophalen. Als de waarde van de variabele iets anders is dan “employee”, wordt de IF conditie FALSE en zal het ELSE gedeelte worden uitgevoerd.
Ik zal u dit eenvoudige gebruik in de onderstaande voorbeelden met uitvoer laten zien. In de laatste sectie, zal ik ook uitleggen hoe te vervullen “ELSE IF” doel dat niet beschikbaar is in SQL Server.
Een eenvoudig voorbeeld van het gebruik van IF statement zonder ELSE
Laat me beginnen met een eenvoudig voorbeeld van het gebruik van de IF SQL statement. We evalueren een variabele van het type int om de waarde ervan te controleren. Als de voorwaarde TRUE is, moet het IF statement een verklaring afdrukken.
De code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/*Het declareren van een variabele*/
DECLARE @val_chk INT;
/*Toekennen van een waarde*/
SET @val_chk = 101;
/*Uitvoeren van de IF-instructie*/
IF @val_chk = 101
PRINT ‘De IF-instructie is WAAR’;
GO
|
De uitvoer van de bovenstaande code is:
“De IF-instructie is WAAR”
Dus de waarde van de variabele is 101.
Wat als de voorwaarde FALSE was?
Als de bovenstaande voorwaarde FALSE was, bijv. als de waarde van de variabele anders was dan 101, dan zou er niets gebeuren.
In de echte wereld wilt u misschien een verklaring uitvoeren of een actie uitvoeren als de voorwaarde in de IF-instructie TRUE of FALSE is.
Daarvoor gebruikt u de ELSE-instructie. De verklaring binnen de ELSE verklaring wordt uitgevoerd als de voorwaarde in de IF verklaring niet is voldaan.
Zie hieronder een demonstratie van het gebruik van de ELSE-instructie:
De IF ELSE CODE:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*Het declareren van een variabele*/
DECLARE @val_chk INT;
/*Toekennen van een waarde*/
SET @val_chk = 50;
/*Uitvoeren van de IF-instructie*/
IF @val_chk >= 101
PRINT ‘De IF-instructie is WAAR’;
ELSE
PRINT ‘De IF-instructie is FASE’;
GO
|
De uitvoer van de bovenstaande code is: “De IF-instructie is FALSE” omdat de waarde van de variabele niet groter of gelijk is aan 101.
Uitvoeren van een SELECT-instructie op basis van VARCHAR-waarde
Nu zal ik een voorbeeld laten zien van het gebruik van een string-waarde in de IF-instructie. Een string variabele wordt gedeclareerd en een waarde toegewezen.
In de IF…ELSE verklaringen, zullen we de waarde van de variabele controleren en de respectievelijke SELECT verklaring uitvoeren. Kijk maar eens:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*Een tekenreeksvariabele declareren*/
DECLARE @table_name VARCHAR(60);
/*Een waarde toewijzen*/
SET @table_name = ’employees’;
/*Uitvoeren van de IF-instructie*/
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
GO
|
De uitvoer van de bovenstaande code is:
Wat als we meerdere keuzes hebben om te controleren? (NESTED IF)
In bovenstaande voorbeelden hadden we slechts twee opties. Of de waarde is WAAR of ONWAAR. Als de waarde WAAR is, wordt de verklaring in de IF uitgevoerd, anders wordt het ELSE gedeelte uitgevoerd.
In het geval van het uitvoeren van SELECT verklaringen, laten we zeggen dat we verschillende tabelnamen moeten controleren en voor elke tabel een SELECT verklaring moeten uitvoeren; hoe kunnen we dat doen?
Het antwoord is het gebruik van de NESTED IF verklaring.
Voorbeeld, als de waarde van de variabele ‘werknemers’ is, voer dan het volgende uit:
SELECT * FROM sto_employees;
Als de waarde ‘producten’ is, voer dan uit:
SELECT * FROM sto_products;
Voor elke andere waarde:
SELECT * FROM sto_emp_salary_paid;
Zie hoe dit wordt vertaald naar NESTED IF statements in 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
|
/*Een tekenreeksvariabele declareren*/
DECLARE @table_name VARCHAR(60);
/*Een waarde toewijzen*/
SET @table_name = ‘products’;
/*Uitvoeren van de IF-instructie*/
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
|
Je ziet dat binnen het ELSE statement het BEGIN sleutelwoord wordt gebruikt waar een ander IF statement wordt geplaatst (het geneste IF). Dit wordt afgesloten met het END keyword.
Daar hebben we nog een voorwaarde geplaatst om te controleren. Probeer verschillende waarden voor de variabele @table_name door uw eigen tabel namen en vervangen in de SELECT verklaring ook voor het ervaren van het zelf.
Gaat een ander niveau in NESTED IF verklaring
Just om te laten zien dat je kunt nesten om vele niveaus, ben ik verder gegaan met behulp van een andere geneste IF verklaring.
Dus, het scenario is om de waarde van een variabele (table_name) te controleren. als de waarde is producten dan de gegevens ophalen uit sto_products tabel. Als de waarde werknemers is dan haalt u de sto_werknemers records op. De derde if controleert of de waarde van de variabele orders is dan de records ophalen uit de tabel orders.
Ten slotte moet het ELSE statement voor elke andere waarde van de variabele de records ophalen uit de tabel salaris van de werknemer.
Zie de meervoudige geneste IF-instructie voor drie voorwaarden 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
|
/*Aangeven van een string-variabele*/
DECLARE @table_name VARCHAR(60);
/*Een waarde toewijzen*/
SET @table_name = ‘orders’;
/*Uitvoeren van de IF-instructie*/
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
|
Omdat ik de waarde van de variabele als orders heb ingesteld, zou het IF statement de records uit de tabel sto_orders moeten retourneren.
In de code ziet u dat de derde IF-instructie wordt gestart na het tweede BEGIN-sleutelwoord.
Note: als u voorwaardelijke uitvoering wilt gebruiken in de SELECT-instructie, gebruik dan de CASE-instructie in SQL.