Podsumowanie: w tym samouczku dowiesz się o SQLite CASE
wyrażenie, aby dodać logikę warunkową do zapytania.
SQLite CASE
wyrażenie ocenia listę warunków i zwraca wyrażenie na podstawie wyniku oceny.
CASE
wyrażenie jest podobne do IF-THEN-ELSE
oświadczenie w innych językach programowania.
Możesz użyć CASE
wyrażenie w dowolnej klauzuli lub instrukcji, która akceptuje prawidłowe wyrażenie. Na przykład możesz użyć CASE
wyrażenie w klauzulach, takich jak WHERE
, ORDER BY
, HAVING
, SELECT
i oświadczenia, takie jak SELECT
, UPDATE
i DELETE
.
SQLite udostępnia dwie formy CASE
wyrażenie:proste CASE
i przeszukano CASE
.
Proste SQLite CASE
wyrażenie
Prosty CASE
wyrażenie porównuje wyrażenie z listą wyrażeń w celu zwrócenia wyniku. Poniżej przedstawiono składnię prostego CASE
wyrażenie.
CASE case_expression
WHEN when_expression_1 THEN result_1
WHEN when_expression_2 THEN result_2
...
[ ELSE result_else ]
END
Code language: SQL (Structured Query Language) (sql)
Prosty CASE
wyrażenie porównuje case_expression
do wyrażenia pojawia się w pierwszym WHEN
klauzula, when_expression_1
, dla równości.
Jeśli case_expression
równa się when_expression_1
, prosty CASE
zwraca wyrażenie w odpowiednim THEN
klauzula, która jest result_1
.
W przeciwnym razie prosty CASE
wyrażenie porównuje case_expression
z wyrażeniem w następnym WHEN
klauzula.
W przypadku braku case_expression
pasuje do when_expression
, CASE
wyrażenie zwraca result_else
w ELSE
klauzula. Jeśli pominiesz ELSE
klauzula CASE
wyrażenie zwraca NULL.
Prosty CASE
wyrażenie wykorzystuje ocenę zwarcia. Innymi słowy, zwraca wynik i przestaje oceniać inne warunki, gdy tylko znajdzie dopasowanie.
Prosty CASE
przykład
Rzućmy okiem na customers
tabeli w przykładowej bazie danych.

Załóżmy, że musisz sporządzić raport grup klientów z logiką, że jeśli klient znajduje się w USA, ten klient należy do grupy krajowej, w przeciwnym razie klient należy do grupy zagranicznej.
Aby wykonać ten raport, użyj prostego CASE
wyrażenie w SELECT
oświadczenie w następujący sposób:
SELECT customerid,
firstname,
lastname,
CASE country
WHEN 'USA'
THEN 'Domestic'
ELSE 'Foreign'
END CustomerGroup
FROM
customers
ORDER BY
LastName,
FirstName;
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
SQLite przeszukał CASE
wyrażenie
Wyszukiwany CASE
wyrażenie ocenia listę wyrażeń, aby zdecydować o wyniku. Zauważ, że prosty CASE
wyrażenie porównuje tylko pod kątem równości, podczas gdy wyszukiwany CASE
wyrażenie może używać dowolnych form porównania.
Poniżej przedstawiono składnię przeszukiwanego CASE
wyrażenie.
CASE
WHEN bool_expression_1 THEN result_1
WHEN bool_expression_2 THEN result_2
[ ELSE result_else ]
END
Code language: SQL (Structured Query Language) (sql)
Wyszukiwany CASE
wyrażenie oblicza wyrażenia logiczne w określonej kolejności i zwraca odpowiedni wynik, jeśli wyrażenie ma wartość prawda.
W przypadku, gdy żadne wyrażenie nie daje wartości true, wyszukiwany CASE
wyrażenie zwraca wyrażenie w ELSE
klauzula, jeśli została określona. Jeśli pominiesz ELSE
klauzula, przeszukiwany CASE
wyrażenie zwraca NULL
.
Podobne do prostego CASE
wyrażenie, wyszukiwany CASE
wyrażenie zatrzymuje ocenę, gdy warunek jest spełniony.
Przeszukano CASE
przykład
Użyjemy tracks
stół do demonstracji.

Załóżmy, że chcesz sklasyfikować utwory na podstawie ich długości, np. mniej minuty, utwór jest krótki; od 1 do 5 minut, tor jest średni; dłuższy niż 5 minut, ścieżka jest długa.
Aby to osiągnąć, użyj wyszukiwanego CASE
wyrażenie w następujący sposób:
SELECT
trackid,
name,
CASE
WHEN milliseconds < 60000 THEN
'short'
WHEN milliseconds > 60000 AND milliseconds < 300000 THEN 'medium'
ELSE
'long'
END category
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Wypróbuj

W tym samouczku poznałeś SQLite CASE
wyrażenie tworzące logikę warunkową wewnątrz zapytania SQL.