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.

  1. Prosty PRZYPADEK
  2. 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.

Praca nad prostym opisem przypadku
Praca nad prostym opisem przypadku

Przykłady

Założenie: Załóżmy, że mamy tabelę jako „Guru99” z dwiema kolumnami i czterema wierszami, jak pokazano poniżej:

Prosty przypadek w SQL Server

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.

Prosty przypadek w SQL Server

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.

Prosty przypadek w SQL Server

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.

Praca nad przeszukanym opisem przypadku

Praca nad przeszukanym opisem przypadku

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.

Przeszukiwany przykład CASE w SQL Server

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.

Przeszukano CASE w SQL Server

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:
SPRAWA
KIEDY Wartość_1 WTEDY Instrukcja_1…

Po słowie kluczowym Case następuje instrukcja WHEN, a pomiędzy CASE i WHEN nie ma żadnego wyrażenia.

Na przykład:
PRZYPADEK KIEDY WTEDY Instrukcja_1…

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:
SPRAWA
KIEDY Wartość_1 WTEDY Instrukcja_1…
KIEDY Wartość_2 WTEDY Instrukcja_2…

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:
Sprawa
GDY WTEDY Instrukcja_1…
GDY WTEDY Instrukcja_2…

Simple Case obsługuje tylko sprawdzanie równości. To znaczy, czy CASE_Expression = VALUE_1, VALUE_2…

Na przykład:
SPRAWA GDY Wartość_1 WTEDY Instrukcja_1… W powyższym przykładzie jedyną operacją wykonywaną przez system jest sprawdzenie, czy Case_Expression = Value_1

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:
PRZYPADEK GDY THEN Instrukcja_1… W powyższym przykładzie wyrażenie_boolowskie_1 może zawierać zarówno operator „równy”, jak i „różny”, np. A = B, A != B.

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żona CASE w SQL Server

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

Zagnieżdżony przykład CASE w SQL Server

CASE z AKTUALIZACJĄ

Założenie: Załóżmy, że mamy tabelę „Guru99” z dwiema kolumnami i czterema wierszami, jak pokazano poniżej:

CASE z UPDATE w SQL Server

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”

CASE z UPDATE w SQL Server

Zapytajmy tabelę Guru99, aby sprawdzić zaktualizowaną wartość:

CASE z UPDATE w SQL Server

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

CASE z Order by w SQL Server

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.