Instrukcja CASE i zagnieżdżona wielkość liter w SQL Server: przykład T-SQL
Przegląd przypadku w prawdziwym życiu!
Ponownie, w prawdziwym życiu wykonujemy różne działania w zależności od wyniku różnych warunków.
Aby opracować więcej, rozważ poniższy przykład:
- Jeśli bilety lotnicze będą tańsze niż 100 dolarów, odwiedzę Los Angeles.
- Jeśli bilety lotnicze będą kosztować od 100 do 200 dolarów, odwiedzę Nowy Jork
- Jeśli bilety lotnicze będą kosztować od 200 do 400 dolarów, odwiedzę Europę
- W przeciwnym razie wolę odwiedzić jakieś pobliskie miejsce turystyczne.
Rozważmy kategoryzację Warunku i Działania oddzielnie od powyższego przykładu poniżej:
Warunki - Bilety lotnicze | Wykonane działania, tylko jeśli Warunek to TRUE |
Less niż 100 USD | Odwiedź Los Angeles |
Między $ 100 a $ 200 | Odwiedź Nowy Jork |
Między $ 200 a $ 400 | Odwiedź Europę |
Żaden z powyższych warunków nie został spełniony | Pobliski punkt turystyczny |
W powyższym przykładzie widzimy, że wynik różnych warunków rządzi odrębnym działaniem. Np. Gość dokona wizyty w Nowym Jorku tylko pod warunkiem, że bilet lotniczy kosztuje od 100 do 200 dolarów.
Podobnie instrukcja MS SQL CASE zapewnia również możliwość podjęcia działań polegających na wykonaniu różnych instrukcji T-SQL w oparciu o wynik różnych warunków.
Co to jest instrukcja CASE w SQL Server?
Instrukcja CASE w SQL Server jest rozszerzeniem instrukcji IF…ELSE. W przeciwieństwie do IF…ELSE, gdzie dozwolony jest tylko jeden warunek, CASE umożliwia użytkownikowi zastosowanie wielu warunków w celu wykonania różnych zestawów akcji w MS SQL. Zwraca odpowiednią wartość powiązaną z warunkiem zdefiniowanym przez użytkownika.
W poniższych sekcjach nauczymy się, jak używać Case w SQL i poznamy jego koncepcję.
In MS SQL, istnieją dwa typy CASE.
- Prosty PRZYPADEK
- Przeszukany przypadek
Prosty PRZYPADEK
Składnia prostego przypadku
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]
Tutaj,
- Parametr Wyrażenie_przypadku oznacza wyrażenie, z którym ostatecznie będziemy porównywani Wartość_1, Wartość_2, ...
- Parametry Oświadczenie_1, Oświadczenie_2… oznaczają instrukcje, które zostaną wykonane, jeśli Case_Expression = Wartość_1, wyrażenie_przypadku = Wartość_2, … i tak dalej.
- Krótko mówiąc, warunek jest to, czy Case_Expression = Wartość_N i AKCJA to wykonanie instrukcji_N, jeśli powyższy wynik jest PRAWDZIWY.
- PSEUDONIM jest opcjonalny i jest nazwą aliasu nadawaną wynikowi instrukcji CASE programu SQL Server. Najczęściej używane, gdy używamy opcji Case w klauzuli wyboru serwera SQL.
Zasady dla prostych przypadków
- Simple Case umożliwia jedynie sprawdzenie równości wyrażenia Case_Expression z wartością_1 do wartości_N.
- Wyrażenie_przypadku jest porównywane z wartością w kolejności rozpoczynającej się od pierwszej wartości, tj. wartości_1. Poniżej znajduje się podejście do wykonania:
- Jeśli Case_Expression jest równoważne Value_1, wówczas dalsze instrukcje WHEN…THEN są pomijane, a wykonanie CASE natychmiast się ZAKOŃCZY.
- Jeżeli wyrażenie_przypadku nie jest zgodne z wartością_1, wówczas wyrażenie_przypadku jest porównywane z wartością_2 w celu sprawdzenia równoważności. Ten proces porównywania wyrażenia Case_Expression z wartością będzie kontynuowany do momentu, gdy Case_Expression znajdzie pasującą równoważną wartość ze zbioru Value_1, Value_2,…
- Jeśli nic nie pasuje, kontrola przechodzi do instrukcji ELSE, a Statement_Else zostanie wykonana.
- ELSE jest opcjonalne.
- Jeśli ELSE nie jest obecne i Case_Expression nie pasuje do żadnej z wartości, wówczas Wyświetli się wartość Null.
Poniższy diagram ilustruje przebieg wykonywania prostego przypadku.
Przykłady
Założenie: Załóżmy, że mamy tabelę jako „Guru99” z dwiema kolumnami i czterema wierszami, jak pokazano poniżej:
Użyjemy „Guru99” tabeli w dalszych przykładach
Zapytanie 1: PROSTY PRZYPADEK z opcją NIE WIĘCEJ
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
Wynik: Poniższy diagram wyjaśnia przebieg wykonywania PROSTEJ PRZYPADKU, w którym NIE MA WIĘCEJ.
Zapytanie 2: PROSTY CASE z opcją 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.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Wynik: Poniższy diagram wyjaśnia przebieg wykonywania PROSTEJ PRZYPADKU z ELSE.
Przeszukany przypadek
Składnia szukanej sprawy
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]
Tutaj,
- Parametr Boolean_Expression_1, …oznacza wyrażenie, które będzie oceniane pod kątem PRAWDA lub FAŁSZ.
- Parametry Statement_1, Statement_2… oznaczają instrukcje, które zostaną wykonane, jeśli odpowiadający im wynik Boolean_Expression_1, Boolean_Expression_2 ma wartość TRUE.
- W skrócie, Warunek to Boolean_Expression_1,… a ACTION jest wykonaniem Statement_N, jeśli powyżej boolean_Expression_1 ma wartość PRAWDA.
- ALIAS_NAME jest opcjonalny i jest nazwą aliasu nadawaną wynikowi instrukcji CASE. Używane najczęściej, gdy w klauzuli Select używamy CASE.
Zasady przeszukiwanej sprawy
- W przeciwieństwie do prostego przypadku, Przeszukiwana wielkość liter nie ogranicza się tylko do sprawdzania równości, ale umożliwia wyrażenie logiczne.
- Wyrażenie Boolean jest oceniane w kolejności rozpoczynającej się od pierwszego wyrażenia Boolean, tj. Boolean_expression_1. Poniżej znajduje się podejście do wykonania:
- Jeśli Boolean_expression_1 ma wartość TRUE, wówczas dalsze instrukcje WHEN…THEN zostaną pominięte, a wykonanie CASE zakończy się natychmiast.
- Jeśli Boolean_expression_1 ma wartość FALSE, wówczas Boolean_expression_2 jest oceniany pod kątem TRUE. Ten proces oceniania Boolean_expression będzie kontynuowany, dopóki jedno z Boolean_expression nie zwróci wartości TRUE.
- Jeśli nic nie pasuje, kontrola przechodzi do instrukcji ELSE, a Statement_Else zostanie wykonana.
- Podobnie jak w przypadku prostego przypadku, ELSE jest opcjonalne również w przypadku wyszukiwania.
- Jeżeli ELSE nie jest obecne i żadne z wyrażeń logicznych nie zwraca TRUE, zostanie wyświetlona wartość Null.
Poniżej schemat ilustrują przepływ wykonywania Przeszukana sprawa.
Przykłady
Zapytanie 1: SEARCHED CASE z opcją 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
Wynik: Poniżej schemat wyjaśnia przebieg wykonania ukończenia PRZESZUKIWANA SPRAWA w NIC WIĘCEJ.
Zapytanie 2: WYSZUKIWANY PRZYPADEK z ELSE opcja.
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
Wynik: Poniżej schemat wyjaśnia przebieg wykonania of POSZUKIWANY SPRAWA w W PRZECIWNYM RAZIE.
Różnica pomiędzy podejściem wykonawczym: SIMPLE i SEARCH CASE.
Przyjrzyjmy się PROSTY PRZYPADEK przykład poniżej:
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
Tutaj, „Nazwa_samouczka” jest częścią wyrażenia CASE w SQL. Następnie „Nazwa_samouczka” wartość jest porównywana z każdym KIEDY wartości, tj. „SQL”… dopóki „Nazwa_samouczka” nie zostanie dopasowana do wartości WHEN.
Przeciwnie, SZUKAJ PRZYPADKU przykład ma nr WYRAŻENIE PRZYPADKU:
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
Tutaj każdy KIEDY stwierdzenie ma swój Warunkowe wyrażenie logiczne. Każdy Wyrażenie logiczne tj. Tutorial_name = 'SQL',… jest oceniany dla PRAWDA FAŁSZ aż do pierwsza wartość logiczna wyrażenie, którego wartością jest TRUE.
Różnica między przypadkiem prostym a przeszukiwanym
Prosta sprawa | Przeszukana sprawa |
---|---|
Bezpośrednio po słowie kluczowym CASE następuje wyrażenie CASE_Expression i przed instrukcją WHEN.
Na przykład: |
Po słowie kluczowym Case następuje instrukcja WHEN, a pomiędzy CASE i WHEN nie ma żadnego wyrażenia.
Na przykład: |
W prostym przypadku dla każdej instrukcji WHEN istnieje WARTOŚĆ. Te wartości: Wartość_1, Wartość_2… Są porównywane sekwencyjnie z pojedynczym wyrażeniem CASE. Wynik jest oceniany pod kątem warunku PRAWDA/FAŁSZ dla każdej instrukcji WHEN.
Na przykład: |
W wyszukiwanym przypadku dla każdej instrukcji WHEN istnieje wyrażenie Boolean_Expression. To Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,… ocenia warunek PRAWDA/FAŁSZ dla każdej instrukcji WHEN.
Na przykład: |
Simple Case obsługuje tylko sprawdzanie równości. To znaczy, czy CASE_Expression = VALUE_1, VALUE_2…
Na przykład: |
Dzięki Boolean_Expression_N, Search Case obsługuje każdą operację, która daje wartość logiczną. Obejmuje operatory równy i nierówny.
Na przykład: |
Zagnieżdżony CASE: CASE w IF ELSE
Możemy użyć CASE wewnątrz JEŚLI INACZEJ. Poniżej znajduje się przykładowy kod MS-SQL
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
W powyższym przykładzie CASE jest zagnieżdżony w instrukcji IF…ELSE:
Najpierw zostanie wykonana instrukcja IF i warunek przypadku Serwer SQL ma wartość Fałsz, wówczas zostanie wykonana instrukcja ELSE.
W przeciwnym razie zawiera zagnieżdżoną instrukcję CASE w SQL. W zależności od wartości biletu lotniczego, zostanie wyświetlony jeden z następujących wyników:
- System wydrukuje informację „Odwiedź pobliską lokalizację turystyczną”, jeśli cena biletów lotniczych przekracza 400 USD
- System wydrukuje informację „Odwiedź Los Angeles”, jeśli bilety lotnicze kosztują OD 0 DO 100 USD
- System wydrukuje informację „Odwiedź Nowy Jork”, jeśli bilety lotnicze kosztują OD 101 DO 200 USD
- System wydrukuje informację „Odwiedź Europę”, jeśli bilety lotnicze kosztują OD 201 DO 400 USD
Zagnieżdżony CASE: CASE wewnątrz CASE
Możemy używać CASE wewnątrz CASE w SQL. Poniżej znajduje się przykładowy kod MS-SQL
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
W powyższym przykładzie CASE jest zagnieżdżone w innej instrukcji CASE:
System rozpoczyna się od wykonania zewnętrznego CASE. Jeśli Flight_Ticket < 400 USD, zostanie wykonany wewnętrzny CASE.
W zależności od wartości biletu lotniczego wyświetlony zostanie jeden z poniższych wyników:
- System wydrukuje informację „Odwiedź pobliską lokalizację turystyczną”, jeśli cena biletów lotniczych przekracza 400 USD
- System wydrukuje informację „Odwiedź Los Angeles”, jeśli bilety lotnicze kosztują OD 0 DO 100 USD
- System wydrukuje informację „Odwiedź Nowy Jork”, jeśli bilety lotnicze kosztują OD 101 DO 200 USD
- System wydrukuje informację „Odwiedź Europę”, jeśli bilety lotnicze kosztują OD 201 DO 400 USD
CASE z AKTUALIZACJĄ
Założenie: Załóżmy, że mamy tabelę „Guru99” z dwiema kolumnami i czterema wierszami, jak pokazano poniżej:
W dalszych przykładach będziemy używać tabeli „Guru99”.
Możemy użyć CASE z UPDATE. Poniżej znajduje się przykładowy kod MS-SQL:
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 )
W powyższym przykładzie w instrukcji UPDATE użyto CASE.
W zależności od wartości Tutorial_Name kolumna Tutorial_Name otrzyma aktualizację z wartością instrukcji THEN.
- Jeśli Tutorial_Name = „SQL” WTEDY zaktualizuj Tutorial_Name do „Strukturalnego języka zapytań”
- Jeśli nazwa_samouczka = „PL/SQL” WTEDY zaktualizuj nazwę_samouczka do „Oracle PL/SQL”
- Jeśli nazwa_samouczka = „MSSQL” WTEDY zaktualizuj nazwę_samouczka do „Microsoft SQL”
- Jeśli Tutorial_Name = „Hadoop” WTEDY zaktualizuj Tutorial_Name do „Apache Hadoop”
Zapytajmy tabelę Guru99, aby sprawdzić zaktualizowaną wartość:
CASE z zamówieniem
Możemy użyć CASE z Order By. Poniżej znajduje się przykładowy kod MS-SQL:
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
Tutaj CASE jest używany z Order By.
@Order jest ustawione na 1 i jako pierwsze KIEDY wyrażenie logiczne ma wartość TRUE, dla opcji Kolejność według warunku wybierany jest Tutorial_ID
Interesujące fakty!
- CASE można zagnieździć w innym CASE, a także w innej instrukcji IF…ELSE.
- Oprócz SELECT, CASE można używać z innym SQL klauzule takie jak UPDATE, ORDER BY.
Podsumowanie
- W MS SQL istnieją dwa typy CASE: prosty CASE i wyszukiwany CASE
- ELSE jest opcjonalne w instrukcji CASE.