SQL Server IF…ELSE-Bedingungsanweisung: T-SQL-Select-Beispiel

⚡ Intelligente Zusammenfassung

IF…ELSE ist eine Ablaufsteuerungsanweisung in SQL Server, die einen T-SQL-Block ausführt, wenn eine boolesche Bedingung als wahr ausgewertet wird, und optional einen alternativen Block, wenn dieselbe Bedingung als falsch ausgewertet wird.

  • 🧭 Bedingte Logik: Bedingte Anweisungen ermöglichen es SQL Server, je nachdem, ob eine Bedingung wahr oder falsch ist, unterschiedliche T-SQL-Aktionen auszuführen.
  • IF- und ELSE-Zweige: Wenn die boolesche Bedingung wahr ist, wird der IF-Block ausgeführt; wenn sie falsch ist, wird stattdessen der optionale ELSE-Block ausgeführt.
  • 🔢 Boolescher Ausdruck: Die Bedingung muss ein boolescher Ausdruck sein, der zu wahr oder falsch ausgewertet wird, wie zum Beispiel (1=1) oder ein Variablenvergleich.
  • 🧱 BEGIN…END-Blöcke: Ein Zweig, der mehr als eine Anweisung ausführt, muss diese Anweisungen zwischen den Schlüsselwörtern BEGIN und END einschließen.
  • ELSE ist optional: Eine IF-Anweisung kann ohne ELSE-Zweig stehen, sodass eine falsche Bedingung einfach keine Aktion auslöst.
  • 🔁 Verschachtelte Bedingungen: SQL Server kennt kein ELSE IF-Schlüsselwort, daher verschachtelt man eine IF…ELSE-Anweisung in eine andere, um mehrere Schwellenwerte zu testen.

SQL Server IF…ELSE-Bedingungsanweisung mit T-SQL SELECT-Abfragebeispielen

Warum brauchen Sie bedingte Anweisungen?

Bedingte Anweisungen in SQL Server helfen Ihnen, unterschiedliche Logik und Aktionen für verschiedene Bedingungen zu definieren. Sie ermöglichen es Ihnen, je nach den in der Anweisung definierten Bedingungen unterschiedliche Aktionen auszuführen. Im Alltag führen Sie viele Aktionen aus, die vom Ergebnis einer anderen Aktivität oder Situation abhängen.

Einige Beispiele für bedingte Anweisungen in Echtzeit sind:

  • Wenn es morgen regnet, plane ich einen Roadtrip.
  • Wenn die Flugtickets von meiner Stadt aus weniger als 400 Dollar kosten, werde ich Urlaub in Europa machen; andernfalls bevorzuge ich einen nahegelegenen Touristenort.

Hier sieht man, dass eine Handlung, wie die oben erwähnte Autoreise, bedingt vom Ergebnis einer anderen Handlung abhängt, nämlich ob es morgen regnet oder nicht. Ähnlich verhält es sich mit MS. SQL Server bietet außerdem die Möglichkeit, eine T-SQL-Anweisung bedingt auszuführen.

IF…ELSE-Anweisung in SQL Server

In MS SQL ist IF…ELSE eine Art bedingter Anweisung. Jede T-SQL-Anweisung kann mithilfe von IF…ELSE bedingt ausgeführt werden. Die folgende Abbildung veranschaulicht die Funktionsweise der IF- und ELSE-Zweige in SQL Server:

Ablaufdiagramm der SQL Server IF…ELSE-Anweisung mit dem wahren IF-Zweig und dem falschen ELSE-Zweig

  • Wenn die Bedingung als wahr ausgewertet wird, werden die T-SQL-Anweisungen ausgeführt, die in SQL Server auf die IF-Bedingung folgen.
  • Wenn die Bedingung als FALSCH ausgewertet wird, werden die T-SQL-Anweisungen ausgeführt, die auf das Schlüsselwort ELSE folgen.
  • Sobald entweder die IF T-SQL-Anweisung oder die ELSE T-SQL-Anweisung ausgeführt wurde, wird die Ausführung der anderen unbedingten T-SQL-Anweisungen fortgesetzt.

IF…ELSE-Syntax und Regeln in SQL

Syntax:

IF <Condition>
     {Statement | Block_of_statement}   
[ ELSE   
     {Statement | Block_of_statement}]

Regeln:

  • Die Bedingung sollte ein boolescher Ausdruck sein, d.h. die Bedingung muss bei ihrer Auswertung einen booleschen Wert ergeben.
  • Eine IF…ELSE-Anweisung in SQL kann bedingt eine einzelne T-SQL-Anweisung oder einen Block von T-SQL-Anweisungen verarbeiten.
  • Ein Block von Anweisungen sollte mit dem Schlüsselwort BEGIN beginnen und mit dem Schlüsselwort END enden.
  • Die Verwendung von BEGIN und END hilft SQL Server dabei, den auszuführenden Anweisungsblock zu identifizieren und ihn von den übrigen T-SQL-Anweisungen zu trennen, die nicht Teil des IF…ELSE T-SQL-Blocks sind.
  • ELSE ist optional.

IF…ELSE-Anweisung mit nur einem numerischen Wert im booleschen Ausdruck

Im ersten Beispiel verwendet der boolesche Ausdruck ausschließlich numerische Werte. Betrachten Sie die folgende Bedingung, die immer wahr ist, da 1 gleich 1 ist.

Bedingung: WAHR

IF (1=1)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

Die Ausführung der Abfrage mit der Bedingung „wahr“ (1=1) gibt die Meldung des IF-Zweigs aus:

Ergebnis der wahren numerischen IF-Bedingung: Ausgabe der IF-Anweisungsmeldung

Zustand: FALSCH

IF (1=2)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

Bei der falschen Bedingung (1=2) wird stattdessen der ELSE-Zweig ausgeführt:

Das Ergebnis der falschen numerischen IF-Bedingung führt zur Ausgabe der ELSE-Anweisung.

Angenommen, Sie haben eine Tabelle mit dem Namen 'Guru99' mit zwei Spalten und vier Zeilen, wie unten dargestellt. Wir werden dieses 'GuruTabelle 99 in den folgenden Beispielen.

Musteranfrage GuruTabelle 99 mit einer Spalte Tutorial_ID und vier Datenzeilen

IF…ELSE mit einer Variablen in einem booleschen Ausdruck

Anstelle von konstanten Zahlen kann der boolesche Ausdruck vergleichen VariableDas folgende Beispiel deklariert eine Integer-Variable und prüft ihren Wert.

Bedingung: WAHR

DECLARE @Course_ID INT = 4

IF (@Course_ID = 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

Da @Course_ID gleich 4 ist, wird der IF-Zweig ausgeführt und gibt die Zeile zurück, in der Tutorial_ID gleich 4 ist:

Das Abfrageergebnis gibt die Zeile mit der Tutorial-ID 4 zurück, wenn die Variablenbedingung wahr ist.

Zustand: FALSCH

DECLARE @Course_ID INT = 4

IF (@Course_ID != 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

Hier ist die Bedingung falsch, daher wird der ELSE-Zweig ausgeführt und gibt jede Zeile zurück, in der Tutorial_ID nicht 4 ist:

Das Abfrageergebnis des ELSE-Zweigs gibt alle Zeilen außer Tutorial_ID 4 zurück.

WENN…SONST mit BEGINN…ENDE

Wenn ein Zweig mehrere Anweisungen ausführen muss, schließen Sie die Anweisungen in einen BEGIN…END-Block ein. Das folgende Beispiel führt in jedem Zweig zwei SELECT-Anweisungen aus.

Bedingung: WAHR

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

Da @Course_ID kleiner oder gleich 2 ist, werden im IF-Block beide SELECT-Anweisungen innerhalb von BEGIN…END ausgeführt:

Ergebnis des IF-Blocks, der zwei SELECT-Anweisungen für Tutorial_ID 1 und 2 ausführt.

Zustand: FALSCH

DECLARE @Course_ID INT = 2

IF (@Course_ID >=3)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

Diesmal ist die Bedingung falsch, daher führt der ELSE-Block seine beiden SELECT-Anweisungen aus:

Ergebnis des ELSE-Blocks, der zwei SELECT-Anweisungen für Tutorial_ID 3 und 4 ausführt.

IF-Anweisung ohne ELSE

In SQL kann eine IF-Anweisung auch ohne ELSE-Zweig verwendet werden, da der ELSE-Zweig optional ist. Zum Beispiel:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	Select * from Guru99 where Tutorial_ID = 1

Es wird die folgende einzelne Zeile ausgegeben:

Ergebnis einer einzelnen Zeile, die von einer IF-Anweisung ohne ELSE-Zweig ausgegeben wird.

Die Ausführung der Bedingung „falsch“ liefert keine Ausgabe. Betrachten Sie die folgende Abfrage:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=0)
	Select * from Guru99 where Tutorial_ID = 1

Das Ergebnis ist leer, wie unten dargestellt:

Ein leeres Ergebnis wird erzeugt, wenn die IF-Bedingung ohne ELSE-Anweisung falsch ist.

Verschachtelte IF…ELSE-Anweisungen

Im Gegensatz zu anderen ProgrammiersprachenSQL Server bietet keine ELSE IF-Anweisung innerhalb einer IF…ELSE-Bedingung. Stattdessen können Sie eine IF…ELSE-Anweisung in eine andere verschachteln, wie unten gezeigt:

 DECLARE @age INT;
SET @age = 60;

IF @age < 18
   PRINT 'underage';
ELSE
BEGIN
   IF @age < 50
      PRINT 'You are below 50';
   ELSE
      PRINT 'Senior';
END;

Bei einem @age von 60 liefert die verschachtelte IF…ELSE-Anweisung folgendes Ergebnis:

Ergebnis der verschachtelten IF…ELSE-Anweisung: Ausgabe: Senior für ein Alter von 60

  • Der Code gibt „unter 18“ aus, wenn der Wert von @age unter 18 liegt.
  • Andernfalls wird der ELSE-Zweig ausgeführt. Der ELSE-Zweig enthält eine verschachtelte IF…ELSE-Anweisung.
  • Wenn der Wert von @age unter 50 liegt, wird „Sie sind unter 50“ ausgegeben. Trifft keine dieser Bedingungen zu, gibt der Code „Senior“ aus.

Häufig gestellte Fragen

IF…ELSE steuert den Ausführungsablauf und wählt aus, welche T-SQL-Anweisungen oder -Blöcke ausgeführt werden. CASE ist ein Ausdruck, der innerhalb einer Abfrage, beispielsweise in einer SELECT- oder WHERE-Klausel, einen einzelnen Wert zurückgibt. CASE kann keine separaten Anweisungen ausführen.

IIF() ist eine Kurzform für einen CASE-Ausdruck und nicht für die IF…ELSE-Ablaufsteuerungsanweisung. Es gibt basierend auf einer booleschen Prüfung einen von zwei Werten zurück und wird innerhalb von Abfragen verwendet. Im Gegensatz zu IF…ELSE kann IIF() keine separaten T-SQL-Anweisungen oder -Blöcke ausführen.

Nein. IF…ELSE ist eine Ablaufsteuerungsanweisung und kann daher nicht innerhalb einer SELECT-Liste oder einer WHERE-Klausel verwendet werden. Um bedingte Werte innerhalb einer Abfrage zurückzugeben, verwenden Sie stattdessen einen CASE-Ausdruck oder die IIF()-Funktion.

Schreiben Sie IF EXISTS (SELECT 1 FROM Tabelle WHERE Bedingung) gefolgt von der auszuführenden Anweisung. EXISTS gibt TRUE zurück, wenn die Unterabfrage mindestens eine übereinstimmende Zeile findet. Der IF-Zweig wird daher nur ausgeführt, wenn die Daten vorhanden sind.

Ja. IF…ELSE wird innerhalb von gespeicherten Prozeduren, Triggern, Funktionen und Batches verwendet, um die Logik zu verzweigen. In Kombination mit BEGIN…END-Blöcken ermöglicht es einer Prozedur, je nach Parametern oder Abfrageergebnissen unterschiedliche SQL-Anweisungen auszuführen.

IF…ELSE wertet seine Bedingung einmal aus und führt den entsprechenden Zweig genau einmal aus. Eine WHILE-Schleife wiederholt ihren Anweisungsblock so lange, wie die Bedingung erfüllt ist. Verwenden Sie IF…ELSE für Verzweigungen und WHILE für Iterationen.

Ja. GitHub-Copilot Sie können IF…ELSE-Blöcke, BEGIN…END-Anweisungen und verschachtelte Bedingungen anhand einer natürlichsprachlichen Eingabeaufforderung erstellen. Überprüfen Sie die generierten booleschen Bedingungen und die Verzweigungslogik immer, bevor Sie das Skript auf Ihrer Datenbank ausführen.

KI- und Machine-Learning-Assistenten übersetzen Regeln in WENN…SONST- oder FALL-Logik, schlagen fehlende Verzweigungen vor und kennzeichnen Bedingungen, die niemals zutreffen können. Der Entwickler prüft jeden Vorschlag auf Korrektheit, bevor er ihn implementiert.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: