CASE wyszukiwane a proste
Dwa sposoby zapisywania CASE
CASE wyszukiwane a proste to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Dwa sposoby zapisu CASE
SQL udostępnia dwie odmiany wyrażenia CASE: prosty CASE i przeszukiwany CASE. Obie zwracają wartość na podstawie warunków, ale różnią się sposobem zapisywania tych warunków.
Po zakończeniu tej lekcji będą Państwo wiedzieć, kiedy używać każdej z tych form i jak unikać typowych błędów wynikających z ich pomylenia.
Prosty CASE — idea
Prosty CASE porównuje jedno wyrażenie z listą wartości. Można myśleć o nim jak o tabeli wyszukiwania: po lewej stronie wybiera się jedną kolumnę lub wartość, a następnie podaje wartości, z którymi jest ona porównywana w poszczególnych gałęziach WHEN.
Składnia: CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END
SELECT
product_name,
category_id,
CASE category_id
WHEN 1 THEN 'Electronics'
WHEN 2 THEN 'Clothing'
WHEN 3 THEN 'Books'
ELSE 'Other'
END AS category_name
FROM products;Prosty CASE w praktyce
W tym przypadku wyrażenie CASE znajduje się bezpośrednio po słowie kluczowym, a kolumna status jest porównywana z każdą wartością WHEN za pomocą operatora równości. Proszę zauważyć, że w gałęziach WHEN nie zapisuje się status = — porównanie jest domyślne.
SELECT
order_id,
status,
CASE status
WHEN 'pending' THEN 'Awaiting payment'
WHEN 'paid' THEN 'Payment received'
WHEN 'shipped' THEN 'On its way'
WHEN 'delivered' THEN 'Completed'
ELSE 'Unknown status'
END AS status_label
FROM orders;Przeszukiwany CASE — idea
Przeszukiwany CASE nie ma wyrażenia bezpośrednio po słowie kluczowym CASE. Zamiast tego każda gałąź WHEN zawiera pełny warunek logiczny. Dzięki temu forma ta jest znacznie bardziej elastyczna: można łączyć różne kolumny, sprawdzać zakresy lub wywoływać funkcje w poszczególnych klauzulach WHEN.
Składnia: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END
SELECT
employee_name,
salary,
CASE
WHEN salary < 30000 THEN 'Entry Level'
WHEN salary < 60000 THEN 'Mid Level'
WHEN salary < 100000 THEN 'Senior'
ELSE 'Executive'
END AS salary_band
FROM employees;Przeszukiwany CASE w praktyce
Ponieważ każde WHEN akceptuje dowolne wyrażenie logiczne, można łączyć wiele kolumn w jednej gałęzi. Baza danych analizuje klauzule WHEN od góry do dołu i zwraca wynik pierwszej gałęzi, dla której warunek ma wartość TRUE.
SELECT
product_name,
stock,
price,
CASE
WHEN stock = 0 THEN 'Out of stock'
WHEN stock < 10 AND price > 100 THEN 'Low stock — premium item'
WHEN stock < 10 THEN 'Low stock'
ELSE 'In stock'
END AS availability
FROM products;Najważniejsza różnica strukturalna
Poniżej przedstawiono najważniejsze rozróżnienie:
Prosty CASE — jedno wyrażenie po słowie CASE, a każde WHEN sprawdza równość względem tego wyrażenia.
Przeszukiwany CASE — brak wyrażenia po słowie CASE, a każde WHEN jest samodzielnym warunkiem logicznym.
Ponieważ prosty CASE wykonuje tylko sprawdzenia równości, nie obsługuje zakresów, wartości NULL ani warunków obejmujących wiele kolumn. Do wszystkiego, co wykracza poza bezpośrednie dopasowanie wartości, należy użyć przeszukiwanego CASE.
-- Simple CASE: equality only
SELECT CASE day_number
WHEN 1 THEN 'Monday'
WHEN 2 THEN 'Tuesday'
ELSE 'Other'
END AS day_name
FROM schedule;
-- Searched CASE: any condition
SELECT CASE
WHEN day_number BETWEEN 1 AND 5 THEN 'Weekday'
WHEN day_number IN (6, 7) THEN 'Weekend'
END AS day_type
FROM schedule;Obsługa NULL — dlaczego wygrywa przeszukiwany CASE
Prosty CASE wewnętrznie używa operatora =, a wyrażenie NULL = NULL w SQL nigdy nie ma wartości TRUE. Dlatego prosty CASE nie może dopasować kolumny zawierającej NULL. Przeszukiwany CASE pozwala zapisać WHEN column IS NULL THEN ..., co działa prawidłowo.
-- Simple CASE: NULL branch never matches
SELECT CASE manager_id
WHEN NULL THEN 'No manager' -- this will NEVER fire
ELSE 'Has manager'
END
FROM employees;
-- Searched CASE: correct NULL check
SELECT CASE
WHEN manager_id IS NULL THEN 'No manager'
ELSE 'Has manager'
END AS manager_status
FROM employees;Łączenie kolumn w przeszukiwanym CASE
Jedną z najważniejszych zalet przeszukiwanego CASE jest możliwość odwoływania się w każdej gałęzi WHEN do zupełnie innych kolumn lub wywoływania funkcji. Dzięki temu można wyrażać złożone reguły biznesowe, których prosty CASE w ogóle nie obsługuje.
SELECT
customer_name,
total_orders,
total_spent,
CASE
WHEN total_spent > 10000 AND total_orders > 20 THEN 'VIP'
WHEN total_spent > 5000 THEN 'Gold'
WHEN total_orders > 10 THEN 'Silver'
ELSE 'Standard'
END AS tier
FROM customers;Używanie CASE w ORDER BY
Obie formy CASE mogą występować wewnątrz ORDER BY, aby utworzyć niestandardową kolejność sortowania, której nie ma w danych. W tym przypadku prosty CASE przypisuje nazwom priorytetów liczby, dzięki czemu wiersze są sortowane według priorytetu biznesowego, a nie alfabetycznie.
SELECT ticket_id, subject, priority
FROM support_tickets
ORDER BY
CASE priority
WHEN 'critical' THEN 1
WHEN 'high' THEN 2
WHEN 'medium' THEN 3
WHEN 'low' THEN 4
ELSE 5
END ASC;CASE wewnątrz funkcji agregujących
Umieszczenie przeszukiwanego CASE wewnątrz funkcji SUM lub COUNT to klasyczny wzorzec agregacji warunkowej, czasem nazywany pivotem. Pozwala on uzyskać sumy dla wielu kategorii podczas jednego skanowania zamiast uruchamiać kilka zapytań.
SELECT
department,
COUNT(*) AS total_employees,
SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count,
SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,
SUM(CASE WHEN salary > 70000 THEN salary ELSE 0 END) AS high_earner_payroll
FROM employees
GROUP BY department;Wybór właściwej formy
Praktyczna zasada:
Prostego CASE należy używać, gdy jedna kolumna jest mapowana na stały zestaw znanych wartości — zapis jest wtedy krótszy i łatwiejszy do odczytania.
Przeszukiwanego CASE należy używać we wszystkich pozostałych przypadkach: dla zakresów, sprawdzania wartości NULL, logiki obejmującej wiele kolumn lub wywołań funkcji w warunkach.
W razie wątpliwości przeszukiwany CASE zawsze zadziała. Każdy prosty CASE można nawet przepisać jako przeszukiwany CASE — ale nie odwrotnie.
-- These two queries return identical results
-- Simple CASE (concise for equality)
SELECT CASE region_code
WHEN 'US' THEN 'United States'
WHEN 'UK' THEN 'United Kingdom'
ELSE 'International'
END AS region_name
FROM sales;
-- Equivalent Searched CASE
SELECT CASE
WHEN region_code = 'US' THEN 'United States'
WHEN region_code = 'UK' THEN 'United Kingdom'
ELSE 'International'
END AS region_name
FROM sales;Szybki test
Sprawdźmy, jak dobrze rozumieją Państwo różnicę między prostym a przeszukiwanym CASE.
Podsumowanie lekcji
Oto, czego nauczyli się Państwo w tej lekcji:
Prosty CASE — po słowie CASE umieszcza się jedno wyrażenie; każde WHEN sprawdza, czy to wyrażenie jest równe określonej wartości. Najlepiej nadaje się do mapowania jednej kolumny na stałą listę etykiet.
Przeszukiwany CASE — po słowie CASE nie ma wyrażenia; każde WHEN zawiera pełny warunek logiczny. Obsługuje zakresy, sprawdzanie wartości NULL, logikę obejmującą wiele kolumn oraz wywołania funkcji.
Obie formy analizują gałęzie od góry do dołu i zwracają wynik pierwszej gałęzi, dla której warunek ma wartość TRUE. Jeśli żadna gałąź nie pasuje i nie ma klauzuli ELSE, wynikiem jest NULL. Najbezpieczniejszym wyborem zapewniającym największą elastyczność jest zawsze przeszukiwany CASE — potrafi on zrobić wszystko, co prosty CASE, a nawet więcej.
Często zadawane pytania
Czy lekcja „CASE wyszukiwane a proste” jest bezpłatna?
Tak — pełny tekst „CASE wyszukiwane a proste” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „CASE wyszukiwane a proste”?
Dwa sposoby zapisywania CASE Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „CASE wyszukiwane a proste”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wyrażenie CASE
- CASE wyszukiwane a proste
- Grupowanie i etykietowanie danych
- CASE w ORDER BY i agregacjach