0Pricing
SQL Academy · Lekcja

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

  1. Wyrażenie CASE
  2. CASE wyszukiwane a proste
  3. Grupowanie i etykietowanie danych
  4. CASE w ORDER BY i agregacjach
← Powrót do SQL Academy