oświadczenie CASE

All lectures for PL purposes
Poziom 1 , Lekcja 239
Dostępny

2.1 Oświadczenie CASE

Istnieją dwa sposoby napisania instrukcji w języku SQL CASE. Pierwszy wpis sprawia, że ​​wygląda to jak przejście z języka Java, podczas gdy drugi format bardziej przypomina liczbę mnogą if-else.

Zacznijmy od pierwszej opcji - analogu przełącznika. Ogólny format to:

CASE case_value
	WHEN value1 THEN result1
	[WHEN value2 THEN result2] ...
	[ELSE resultN]
END

Naprawdę bardzo podobny do switch, tylko słowa są nieco inne:

SQL Jawa
przypadek x przełącznik (x) {
kiedy wartość wartość przypadku:
potem wynik zwróć wynik;
inny wynik domyślnie: zwróć wynik;
koniec }

Przetłumaczmy przykład z Javy na SQL:

Jawa SQL
switch (a) {
   case 1: return "one";
   case 2: return "two";
   case 3: return "three";
   default: return "unknown";
}
CASE a
   WHEN 1 THEN 'one'
   WHEN 2 THEN 'two'
   WHEN 3 THEN 'three'
   ELSE 'unknown'
END

2.2 Druga wersja oświadczenia CASE

Istnieje również druga wersja operatora CASE, która, jak wspomniano powyżej, jest bardziej podobna do liczby mnogiej if-else. Ogólny format to:

CASE
	WHEN condition 1 THEN result1
	[WHEN condition 2 THEN result2] ...
	[ELSE resultN]
END

Tutaj warunki są po prostu sprawdzane sekwencyjnie, jeśli którykolwiek z nich jest prawdziwy, to określony wynik zostanie zwrócony. Jeśli żaden z warunków nie jest spełniony, wartość określona w ELSE.

Przetłumaczmy przykład z Javy na SQL:

Jawa SQL
if (a == 3)
	return "three";
CASE
   WHEN a=3 THEN 'three'
END
if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END
if (a == 1)
	return "three";
else if (a == 2)
	return "two";
else if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=1 THEN 'one'
   WHEN a=2 THEN 'two'
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END

2.3 Rozwiąż problem za pomocą instrukcji CASE

Zapiszmy jakieś interesujące zapytanie. Pamiętajcie, mieliśmy zadanie - dodać słowo „WAŻNY!” do nazwy przeszłych zadań w tabeli zadań . Można to łatwo zrobić za pomocą CASE.

Dla pola terminu będzie to wyglądać jak druga wersja wyciągu CASE:


CASE
	WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
	ELSE name
END
        

Przykład kompletnego zapytania z użyciem operatora CASE:


SELECT
    id,
    emploee_id,
    CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
    deadline         	
FROM task
        

Wynikiem tego zapytania będzie:

ID identyfikator_pracownika nazwa termin ostateczny
1 1 WYGASŁY! Napraw błąd w interfejsie użytkownika 2022-06-01
2 2 Napraw błąd w backendzie 2022-06-15
3 5 Kup kawę 2022-07-01
4 5 Kup kawę 2022-08-01
5 5 Kup kawę 2022-09-01
6 (ZERO) Posprzątaj biuro (ZERO)
7 4 Ciesz się życiem (ZERO)
8 6 Ciesz się życiem (ZERO)
Komentarze (4)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Przemo Poziom 4, Legnica, Poland
25 lipca 2024
if (a == 1) return "three";
NiceHatMate Poziom 20, Poland, Poland
13 lutego 2025
co się stało pod Legnicą?
Przemo Poziom 4, Legnica, Poland
21 lutego 2025
Skąd ja mam to wiedzieć ty?
NiceHatMate Poziom 20, Poland, Poland
25 lutego 2025
Chłop się >>>>> jajecznicą.