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.
- Einfacher Fall
- 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.
Beispiele
Annahme: Nehmen wir an, wir haben die Tabelle als 'Guru99' mit zwei Spalten und vier Zeilen wie unten dargestellt:
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.
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.
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.
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.
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.
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: |
Auf das Schlüsselwort case folgt die WHEN-Anweisung, und zwischen CASE und WHEN gibt es keinen Ausdruck.
Z.B: |
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: |
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: |
Einfache Fallunterstützung nur Gleichheitsprüfung. Dh ob CASE_Expression = VALUE_1, VALUE_2…
Z.B: |
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: |
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: 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
FALL mit UPDATE
Annahme: Angenommen, wir haben die Tabelle „Guru99“ mit zwei Spalten und vier Zeilen, wie unten dargestellt:
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'.
Lassen Sie uns die Guru99-Tabelle abfragen, um den aktualisierten Wert zu überprüfen:
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
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.