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 |
---|---|
|
|
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 |
---|---|
|
|
|
|
|
|
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) |