CASE-Anweisung und verschachtelter Fall in SQL Server: T-SQL-Beispiel

Überblick über den Fall im wirklichen Leben!

Auch im wirklichen Leben führen wir je nach dem Ergebnis verschiedener Bedingungen unterschiedliche Aktionen aus.

Um das näher zu erläutern, betrachten Sie das folgende Beispiel:

  • Wenn Flugtickets weniger als 100 $ kosten, werde ich Los Angeles besuchen.
  • Wenn Flugtickets zwischen 100 und 200 US-Dollar kosten, werde ich New York besuchen
  • Wenn Flugtickets zwischen 200 und 400 US-Dollar kosten, werde ich Europa besuchen
  • Ansonsten würde ich es vorziehen, einen nahegelegenen Touristenort zu besuchen.

Betrachten wir die Kategorisierung von Bedingung und Aktion getrennt vom obigen Beispiel unten:

Bedingungen – Flugtickets Durchgeführte Aktionen, nur wenn Bedingung ist TRUE
Less als $ 100 Besuchen Sie Los Angeles
Zwischen $ 100 bis $ 200 Besuchen Sie New York
Zwischen $ 200 bis $ 400 Besuchen Sie Europa
Keine der oben genannten Bedingungen erfüllt In der Nähe gelegener Touristenort

Im obigen Beispiel können wir sehen, dass das Ergebnis der verschiedenen Bedingungen die einzelnen Aktionen bestimmt. Beispielsweise wird ein Besucher einen Besuch in New York nur unter der Bedingung durchführen, dass das Flugticket zwischen 100 und 200 US-Dollar kostet.

In ähnlicher Weise bietet die MS SQL-CASE-Anweisung auch die Möglichkeit, basierend auf dem Ergebnis verschiedener Bedingungen unterschiedliche T-SQL-Anweisungen auszuführen.

Was ist die CASE-Anweisung in SQL Server?

CASE-Anweisung in SQL Server ist die Erweiterung der IF…ELSE-Anweisung. Im Gegensatz zu IF…ELSE, wo nur maximal eine Bedingung zulässig ist, ermöglicht CASE dem Benutzer, mehrere Bedingungen anzuwenden, um verschiedene Aktionssätze in MS SQL auszuführen. Es gibt einen entsprechenden Wert zurück, der der vom Benutzer definierten Bedingung zugeordnet ist.

Lassen Sie uns in den folgenden Abschnitten die Verwendung von Case in SQL und das Konzept lernen.

In MS SQLgibt es zwei Arten von CASE.

  1. Einfacher Fall
  2. Gesucht CASE

Einfacher Fall

Die Syntax für Simple Case

CASE <Case_Expression>
     WHEN Value_1 THEN Statement_1
     WHEN Value_2 THEN Statement_2
     .
     .
     WHEN Value_N THEN Statement_N
     [ELSE Statement_Else]   
END AS [ALIAS_NAME]

Hier

  • Der Parameter Case_Expression bezeichnet den Ausdruck, mit dem wir schließlich verglichen werden Wert_1, Wert_2, ...
  • Die Parameter Aussage_1, Aussage_2… bezeichnen die Anweisungen, die ausgeführt werden, wenn Case_Expression = Value_1, Case_Expression = Wert_2, … und so weiter.
  • Kurz gesagt, die Zustand ist, ob Case_Expression = Value_N und ACTION ist die Ausführung von Statement_N, wenn der Das obige Ergebnis ist WAHR.
  • PSEUDONYM ist optional und der Aliasname, der dem Ergebnis der SQL Server-CASE-Anweisung gegeben wird. Wird hauptsächlich verwendet, wenn wir Case in der SQL Server-Select-Klausel verwenden.

Regeln für den einfachen Fall

  • Simple Case ermöglicht nur die Gleichheitsprüfung von Case_Expression mit Value_1 bis Value_N.
  • Der Case_Expression wird mit Value verglichen, beginnend mit dem ersten Wert, also Value_1. Unten ist der Ausführungsansatz:
  • Wenn Case_Expression äquivalent zu Value_1 ist, werden weitere WHEN…THEN-Anweisungen übersprungen und die CASE-Ausführung wird sofort ENDE.
  • Wenn Case_Expression nicht mit Value_1 übereinstimmt, wird Case_Expression mit Value_2 auf Gleichwertigkeit verglichen. Dieser Vorgang des Vergleichs von Case_Expression mit Value wird fortgesetzt, bis Case_Expression einen passenden äquivalenten Wert aus der Menge von Value_1, Value_2, ... findet.
  • Wenn nichts übereinstimmt, geht die Steuerung an die ELSE-Anweisung und Statement_Else wird ausgeführt.
  • ELSE ist optional.
  • Wenn ELSE nicht vorhanden ist und Case_Expression mit keinem der Werte übereinstimmt, dann Es wird Null angezeigt.

Das folgende Diagramm veranschaulicht den Ausführungsablauf von Simple Case.

Funktionsweise einer einfachen Fallaussage
Funktionsweise einer einfachen Fallaussage

Beispiele

Annahme: Nehmen wir an, wir haben die Tabelle als 'Guru99' mit zwei Spalten und vier Zeilen wie unten dargestellt:

Einfacher Fall in SQL Server

Wir werden verwenden 'Guru99' Tabelle in weiteren Beispielen

Abfrage 1: SIMPLE CASE mit der Option NO ELSE

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

Ergebnis: Das folgende Diagramm erläutert den Ausführungsablauf eines SIMPLE CASE ohne ELSE.

Einfacher Fall in SQL Server

Abfrage 2: SIMPLE CASE mit der ELSE-Option.

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

Ergebnis: Das folgende Diagramm erläutert den Ausführungsablauf eines SIMPLE CASE mit ELSE.

Einfacher Fall in SQL Server

Gesucht CASE

Die Syntax für den durchsuchten Fall

CASE 
     WHEN <Boolean_Expression_1> THEN Statement_1
     WHEN <Boolean_Expression_2> THEN Statement_2
     .
     .
     WHEN <Boolean_Expression_N> THEN Statement_N
     [ELSE Statement_Else]   
END AS [ALIAS_NAME]

Hier

  • Der Parameter Boolean_Expression_1, …bezeichnet den Ausdruck, der auf TRUE oder FALSE ausgewertet wird.
  • Die Parameter Statement_1, Statement_2… bezeichnen die Anweisungen, die ausgeführt werden, wenn das entsprechende Ergebnis von Boolean_Expression_1, Boolean_Expression_2 TRUE ist.
  • Kurz gesagt, Bedingung ist Boolescher_Ausdruck_1,… und AKTION ist die Ausführung von Anweisung_N, wenn oben boolescher_Ausdruck_1 WAHR ist.
  • ALIAS_NAME ist optional und der Aliasname, der dem Ergebnis der CASE-Anweisung gegeben wird. Wird hauptsächlich verwendet, wenn wir CASE in der Select-Klausel verwenden.

Regeln für den gesuchten Fall

  • Im Gegensatz zum einfachen Fall ist Searched Case nicht nur auf die Gleichheitsprüfung beschränkt, sondern ermöglicht auch boolesche Ausdrücke.
  • Der boolesche Ausdruck wird der Reihe nach ausgewertet, beginnend mit dem ersten booleschen Ausdruck, also Boolescher_Ausdruck_1. Unten ist der Ausführungsansatz:
    • Wenn Boolean_expression_1 TRUE ist, werden weitere WHEN…THEN-Anweisungen übersprungen und die CASE-Ausführung wird sofort ENDE.
    • Wenn Boolean_expression_1 FALSE ist, wird Boolean_expression_2 für die WAHR-Bedingung ausgewertet. Dieser Prozess der Bewertung des booleschen_Ausdrucks wird fortgesetzt, bis einer der booleschen_Ausdrücke TRUE zurückgibt.
    • Wenn nichts übereinstimmt, geht die Steuerung an die ELSE-Anweisung und Statement_Else wird ausgeführt.
  • Wie im einfachen Fall ist ELSE auch im Suchfall optional.
  • Wenn ELSE nicht vorhanden ist und keiner der Boolean_expressions TRUE zurückgibt, wird Null angezeigt.

Untenstehendes Diagramm Veranschaulichen Sie den Ausführungsablauf des Durchsuchter Fall.

Bearbeitung der durchsuchten Fallerklärung

Bearbeitung der durchsuchten Fallerklärung

Beispiele

Abfrage 1: Gesuchter Fall mit der Option NO ELSE

SELECT Tutorial_ID, Tutorial_name,
CASE 
 	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

Ergebnis: Untenstehendes Diagramm erklärt den Ausführungsablauf dauert ebenfalls 3 Jahre. Das erste Jahr ist das sog. Gesuchter Fall mit NICHTS ANDERES.

Durchsuchtes CASE-Beispiel in SQL Server

Abfrage 2: GESUCHERTER FALL an. Nach der Installation können Sie HEIC-Dateien mit der ELSE .

SELECT Tutorial_ID, Tutorial_name,
CASE 
	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

Ergebnis: Untenstehendes Diagramm erklärt den Ausführungsablauf of der gesuchte Fall mit SONST.

CASE in SQL Server durchsucht

Unterschied zwischen Ausführungsansatz: SIMPLE und SEARCH CASE.

Schauen wir uns das an EINFACHER FALL Beispiel unten:

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

Hier 'Tutorial_name' ist ein Teil des CASE-Ausdrucks in SQL. Dann 'Tutorial_name' Der Wert wird jeweils miteinander verglichen WANN-Werte, dh 'SQL'... bis 'Tutorial_name' mit den WHEN-Werten übereinstimmt.

Im Gegenteil, FALL SUCHEN Beispiel hat keine CASE-Ausdruck:

SELECT Tutorial_ID, Tutorial_name,
CASE 
 	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

Hier jeder WHEN-Anweisung hat Bedingter boolescher Ausdruck. . Boolescher Ausdruck Das heißt, Tutorial_name = 'SQL',… wird ausgewertet WAHR FALSCH bis erster Boolescher Wert Ausdruck, der zu ausgewertet wird TRUE.

Unterschied zwischen einfachem und gesuchtem Fall

Einfacher Fall Durchsuchter Fall
Auf das Schlüsselwort CASE folgt unmittelbar CASE_Expression und vor der WHEN-Anweisung.

Z.B:
FALL
WHEN Wert_1 DANN Aussage_1…

Auf das Schlüsselwort case folgt die WHEN-Anweisung, und zwischen CASE und WHEN gibt es keinen Ausdruck.

Z.B:
FALL WANN DANN Aussage_1…

Im einfachen Fall existiert VALUE für jede WHEN-Anweisung. Diese Werte: Value_1, Value_2… werden nacheinander mit einzelnen CASE_Expression verglichen. Das Ergebnis wird für jede WHEN-Anweisung auf die TRUE/FALSE-Bedingung hin ausgewertet.

Z.B:
FALL
WHEN Wert_1 DANN Aussage_1…
WHEN Wert_2 DANN Aussage_2…

Im durchsuchten Fall ist Boolean_Expression für jede WHEN-Anweisung vorhanden. Diese Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,… wertet die TRUE/FALSE-Bedingung für jede WHEN-Anweisung aus.

Z.B:
CASE
WANN DANN Aussage_1…
WANN DANN Aussage_2…

Einfache Fallunterstützung nur Gleichheitsprüfung. Dh ob CASE_Expression = VALUE_1, VALUE_2…

Z.B:
FALL WHEN Value_1 THEN Statement_1…Im obigen Beispiel prüft das System lediglich, ob Case_Expression = Value_1 ist.

Mit Boolean_Expression_N unterstützt Search Case jede Operation, die einen Booleschen Wert ergibt. Dazu gehören die Operatoren „gleich“ und „ungleich“.

Z.B:
FALL, WENN DANN Anweisung_1… Im obigen Beispiel kann Boolean_Expression_1 sowohl den Operator „gleich“ als auch „ungleich“ enthalten, wie etwa A = B, A != B.

Verschachtelter CASE: CASE in IF ELSE

Wir verwenden CASE im Inneren, WENN SONST. Unten finden Sie den Beispiel-MS-SQL-Code

DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 190;
IF @Flight_Ticket > 400
   PRINT 'Visit Nearby Tourist Location';
ELSE 
BEGIN
    SELECT
	CASE 
	WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
	WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
	WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
	END AS Location	
END

Im obigen Beispiel ist CASE innerhalb der IF…ELSE-Anweisung verschachtelt:

Zuerst wird die IF-Anweisung ausgeführt und die Case-Bedingung eingegeben SQL Server Falsch ist, wird die ELSE-Anweisung ausgeführt.

Andernfalls enthält es eine verschachtelte CASE-Anweisung in SQL. Abhängig vom Wert des Flugtickets wird eines der folgenden Ergebnisse angezeigt:

  • Das System druckt „Besuchen Sie einen nahegelegenen Touristenort“ aus, wenn die Flugtickets mehr als 400 $ kosten
  • Das System gibt „Visit Los Angeles“ aus, wenn die Flugtickets ZWISCHEN 0 UND 100 US-Dollar kosten
  • Das System druckt „Visit New York“, wenn Flugtickets ZWISCHEN 101 UND 200 US-Dollar kosten
  • Das System gibt „Visit Europe“ aus, wenn die Flugtickets ZWISCHEN 201 UND 400 US-Dollar kosten

Verschachtelter CASE in SQL Server

Verschachtelter CASE: CASE innerhalb von CASE

Wir können CASE innerhalb von CASE in SQL verwenden. Unten finden Sie den Beispiel-MS-SQL-Code

DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 250;
SELECT
CASE 
WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.'
WHEN @Flight_Ticket < 400 THEN 
    	CASE 
		WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
		WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
		WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
		END	
END AS Location

Im obigen Beispiel ist CASE in einer anderen CASE-Anweisung verschachtelt:

Das System beginnt mit der Ausführung des äußeren CASE. Wenn Flight_Ticket < $400 ist, wird inneres CASE ausgeführt.

Abhängig vom Wert des Flugtickets wird eines der folgenden Ergebnisse angezeigt:

  • Das System druckt „Besuchen Sie einen nahegelegenen Touristenort“ aus, wenn die Flugtickets mehr als 400 $ kosten
  • Das System gibt „Visit Los Angeles“ aus, wenn die Flugtickets ZWISCHEN 0 UND 100 US-Dollar kosten
  • Das System druckt „Visit New York“, wenn Flugtickets ZWISCHEN 101 UND 200 US-Dollar kosten
  • Das System gibt „Visit Europe“ aus, wenn die Flugtickets ZWISCHEN 201 UND 400 US-Dollar kosten

Verschachteltes CASE-Beispiel in SQL Server

FALL mit UPDATE

Annahme: Angenommen, wir haben die Tabelle „Guru99“ mit zwei Spalten und vier Zeilen, wie unten dargestellt:

CASE mit UPDATE in SQL Server

In weiteren Beispielen werden wir die Tabelle „Guru99“ verwenden

Wir können CASE mit UPDATE verwenden. Unten finden Sie den Beispiel-MS-SQL-Code:

UPDATE Guru99
SET Tutorial_Name = 
	(
	CASE
	WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.'
	WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL'
	WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.'
	WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.'
	END
	)

Im obigen Beispiel wird CASE in der UPDATE-Anweisung verwendet.

Abhängig vom Wert „Tutorial_Name“ wird die Spalte „Tutorial_Name“ mit dem THEN-Anweisungswert aktualisiert.

  • Wenn Tutorial_Name = 'SQL', DANN aktualisieren Sie Tutorial_Name auf 'Structured Query language'.
  • Wenn Tutorial_Name = 'PL/SQL', DANN aktualisieren Sie Tutorial_Name auf 'Oracle PL/SQL'
  • Wenn Tutorial_Name = „MSSQL“, DANN aktualisieren Sie Tutorial_Name auf „Microsoft SQL‘
  • Wenn Tutorial_Name = 'Hadoop', DANN aktualisieren Sie Tutorial_Name auf 'Apache Hadoop'.

CASE mit UPDATE in SQL Server

Lassen Sie uns die Guru99-Tabelle abfragen, um den aktualisierten Wert zu überprüfen:

CASE mit UPDATE in SQL Server

CASE mit Order by

Wir können CASE mit Order By verwenden. Unten finden Sie den Beispiel-MS-SQL-Code:

Declare @Order Int;
Set @Order = 1
Select * from Guru99 order by 
CASE 
	WHEN @Order = 1 THEN Tutorial_ID
	WHEN @Order = 2 THEN Tutorial_Name
	END
DESC

Hier wird CASE mit Order By verwendet.

@Order ist auf 1 gesetzt und als erster boolescher Ausdruck, WENN er TRUE ergibt, wird Tutorial_ID für Order by Condition ausgewählt

CASE mit Order by in SQL Server

Interessante Fakten!

  • CASE kann sowohl in einem anderen CASE als auch in einer anderen IF…ELSE-Anweisung verschachtelt werden.
  • Zusätzlich zu SELECT kann CASE mit einem anderen verwendet werden SQL Klausel wie UPDATE, ORDER BY.

Zusammenfassung

  • In MS SQL gibt es zwei Arten von CASE: Einfaches CASE und durchsuchtes CASE
  • ELSE ist in der CASE-Anweisung optional.