Generell ist die IF..ELSE eine Entscheidungsanweisung in verschiedenen Programmiersprachen. Die IF-Anweisung wird verwendet, um einen Codeblock auszuführen, wenn eine Bedingung erfüllt ist. Wenn eine Bedingung nicht erfüllt ist (FALSE), kann optional die ELSE-Anweisung verwendet werden.
Im Falle von SQL Server wird die IF-Anweisung verwendet, um SQL-Anweisungen auszuführen, wenn eine Bedingung TRUE ist.
Zum Beispiel:
1
2
3
4
5
6
7
|
IF @table_name = ‘Mitarbeiter’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
|
Im obigen Code ist die @table_name eine Variable. Wenn dieser Variablen der Wert “employees” zugewiesen ist, ruft die IF-Anweisung die Daten aus der Tabelle sto_employees ab. Ist der Wert der Variablen ein anderer als “employee”, wird die IF-Bedingung FALSE und der ELSE-Teil wird ausgeführt.
Ich werde Ihnen diese einfache Verwendung in den folgenden Beispielen mit Ausgabe zeigen. Im letzten Abschnitt werde ich auch erklären, wie man den Zweck von “ELSE IF” erfüllt, der in SQL Server nicht verfügbar ist.
Ein einfaches Beispiel für die Verwendung der IF-Anweisung ohne ELSE
Lassen Sie mich mit einem einfachen Beispiel für die Verwendung der IF SQL-Anweisung beginnen. Wir werden eine Variable vom Typ int auswerten, um ihren Wert zu überprüfen. Wenn die Bedingung TRUE ist, soll die IF-Anweisung eine Anweisung ausgeben.
Der Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/*Deklarieren einer Variablen*/
DECLARE @val_chk INT;
/*Zuweisung eines Wertes*/
SET @val_chk = 101;
/*Ausführung der IF-Anweisung*/
IF @val_chk = 101
PRINT ‘Die IF-Anweisung ist TRUE’;
GO
|
Die Ausgabe des obigen Codes ist:
“Die IF-Anweisung ist WAHR”
Damit ist der Wert der Variablen 101.
Was wäre, wenn die Bedingung FALSCH wäre?
Wenn die obige Bedingung FALSCH wäre, z.B. wenn der Wert der Variablen nicht 101 wäre, dann würde nichts passieren.
In der Praxis möchten Sie vielleicht eine Anweisung ausführen oder eine Aktion durchführen, wenn die Bedingung in der IF-Anweisung WAHR oder FALSCH ist.
Dafür verwenden Sie die ELSE-Anweisung. Die Anweisung innerhalb der ELSE-Anweisung wird ausgeführt, wenn die Bedingung in der IF-Anweisung nicht erfüllt ist.
Siehe unten ein Beispiel für die Verwendung der ELSE-Anweisung:
Der 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
|
/*Deklarieren einer Variablen*/
DECLARE @val_chk INT;
/*Zuweisung eines Wertes*/
SET @val_chk = 50;
/*Ausführung der IF-Anweisung*/
IF @val_chk >= 101
PRINT ‘Die IF-Anweisung ist TRUE’;
ELSE
PRINT ‘Die IF-Anweisung ist FALSCH’;
GO
|
Die Ausgabe des obigen Codes ist: “Die IF-Anweisung ist FALSCH”, da der Wert der Variablen nicht größer oder gleich 101 ist.
Ausführen einer SELECT-Anweisung basierend auf einem VARCHAR-Wert
Nun möchte ich ein Beispiel für die Verwendung eines String-Wertes in der IF-Anweisung zeigen. Eine String-Variable wird deklariert und mit einem Wert versehen.
In den IF…ELSE-Anweisungen wird der Wert der Variablen überprüft und die entsprechende SELECT-Anweisung ausgeführt. Schauen Sie mal:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*Deklarieren einer String-Variable*/
DECLARE @table_name VARCHAR(60);
/*Zuweisen eines Wertes*/
SET @Tabellenname = ‘Mitarbeiter’;
/*Ausführen der IF-Anweisung*/
IF @Tabellenname = ‘Mitarbeiter’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
GO
|
Die Ausgabe des obigen Codes ist:
Was, wenn wir mehrere Auswahlmöglichkeiten zu prüfen haben? (NESTED IF)
In den obigen Beispielen hatten wir nur zwei Möglichkeiten. Entweder ist der Wert TRUE oder FALSE. Wenn TRUE, wird die Anweisung innerhalb des IF ausgeführt, andernfalls wird der ELSE-Teil ausgeführt.
Im Falle der Ausführung von SELECT-Anweisungen, nehmen wir an, wir müssen verschiedene Tabellennamen überprüfen und die jeweilige SELECT-Anweisung für jeden ausführen; wie können wir das dann tun?
Die Antwort ist die Verwendung der NESTED IF-Anweisung.
Wenn zum Beispiel der Wert der Variablen “Mitarbeiter” ist, dann führen Sie die folgende Anweisung aus:
SELECT * FROM sto_employees;
Wenn der Wert Produkte ist, dann führen Sie die folgende Anweisung aus:
SELECT * FROM sto_products;
Für jeden anderen Wert:
SELECT * FROM sto_emp_salary_paid;
Sehen Sie, wie dies in NESTED IF-Anweisungen in SQL übersetzt wird:
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
|
/*Deklarieren einer String-Variable*/
DECLARE @table_name VARCHAR(60);
/*Zuweisen eines Wertes*/
SET @Tabellenname = ‘Produkte’;
/*Ausführen der IF-Anweisung*/
IF @Tabellenname = ‘Mitarbeiter’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @tabellenname = ‘Produkte’
SELECT * FROM sto_products;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
GO
|
Sie sehen, dass innerhalb der ELSE-Anweisung das Schlüsselwort BEGIN verwendet wird, wo eine weitere IF-Anweisung platziert wird (das verschachtelte IF). Diese wird mit dem Schlüsselwort END abgeschlossen.
Dort haben wir eine weitere Bedingung zur Überprüfung eingefügt. Probieren Sie verschiedene Werte für die Variable @tabellenname durch Ihre eigenen Tabellennamen aus und ersetzen Sie sie auch in der SELECT-Anweisung, um es selbst zu erleben.
Eine weitere Ebene in der verschachtelten IF-Anweisung
Um zu zeigen, dass Sie viele Ebenen verschachteln können, gehe ich noch weiter, indem ich eine weitere verschachtelte IF-Anweisung verwende.
Das Szenario besteht also darin, den Wert einer Variablen (tabellenname) zu überprüfen. Wenn der Wert products ist, dann holen Sie die Daten aus der Tabelle sto_products. Wenn der Wert employees ist, werden die Datensätze von sto_employees abgerufen. Die dritte if-Anweisung prüft, ob der Wert der Variablen orders ist, und holt dann die Datensätze aus der Tabelle orders.
Schließlich sollte die ELSE-Anweisung für jeden anderen Wert der Variablen die Datensätze der Tabelle salary paid des Mitarbeiters holen.
Siehe die mehrfach verschachtelte IF-Anweisung für drei Bedingungen 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
|
/*Deklarieren einer String-Variable*/
DECLARE @table_name VARCHAR(60);
/*Zuweisen eines Wertes*/
SET @Tabellenname = ‘Aufträge’;
/*Ausführen der IF-Anweisung*/
IF @Tabellenname = ‘Mitarbeiter’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @tabellenname = ‘Produkte’
SELECT * FROM sto_products;
ELSE
BEGIN
IF @table_name = ‘orders’
SELECT * FROM sto_orders;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
END ;
GO
|
Da ich den Wert der Variablen auf orders gesetzt habe, sollte die IF-Anweisung die Datensätze aus der Tabelle sto_orders zurückgeben.
Im Code sehen Sie, dass die dritte IF-Anweisung nach dem zweiten BEGIN-Schlüsselwort beginnt.
Hinweis: Wenn Sie eine bedingte Ausführung in der SELECT-Anweisung verwenden möchten, verwenden Sie die CASE-Anweisung in SQL.