0Pricing
SQL Academy · 강의

검색형 CASE와 단순 CASE

CASE를 작성하는 두 가지 방법을 알아봅니다.

검색형 CASE와 단순 CASE은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

CASE를 작성하는 두 가지 방법

SQL은 CASE 표현식에 두 가지 형식을 제공합니다: 단순 CASE와 검색 CASE입니다. 둘 다 조건에 따라 값을 반환하지만, 조건을 작성하는 방식이 다릅니다.

이 레슨을 마치면 각 형식을 언제 사용해야 하는지, 그리고 두 형식을 혼동할 때 생기는 흔한 실수를 피하는 방법을 알게 됩니다.

단순 CASE — 개념

단순 CASE는 하나의 표현식을 값 목록과 비교합니다. 조회 테이블처럼 생각하면 됩니다. 왼쪽에서 열 하나 또는 값을 선택한 다음, 각 WHEN 분기에서 그 값과 같은 값을 나열합니다.

구문: 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;

단순 CASE 실습

여기서는 CASE 표현식이 키워드 바로 뒤에 오고, 열 status가 각 WHEN 값과 동등 비교됩니다. WHEN 분기에서 status =를 작성하지 않아도 된다는 점에 유의하세요. 비교가 암시적으로 이루어지기 때문입니다.

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;

검색 CASE — 개념

검색 CASE에는 CASE 키워드 바로 뒤에 표현식이 없습니다. 대신 각 WHEN 분기에 완전한 불리언 조건이 들어갑니다. 따라서 훨씬 유연하게 사용할 수 있습니다. 각 WHEN에서 서로 다른 열을 조합하거나, 범위를 확인하거나, 함수를 호출할 수 있습니다.

구문: 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;

검색 CASE 실습

각 WHEN에서는 어떤 불리언 표현식이든 사용할 수 있으므로, 하나의 분기에서 여러 열을 결합할 수 있습니다. 데이터베이스는 WHEN 절을 위에서 아래로 평가하고, 처음으로 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;

핵심 구조 차이

아래 내용에서 핵심적인 차이를 확인할 수 있습니다:

단순 CASE — CASE 뒤에 표현식 하나가 오고, 각 WHEN은 해당 표현식과 같은지 확인합니다.
검색 CASE — CASE 뒤에 표현식이 없고, 각 WHEN은 독립적인 불리언 조건입니다.

단순 CASE는 동등성만 확인하므로 범위, NULL 또는 여러 열을 사용하는 조건을 처리할 수 없습니다. 직접적인 값 일치보다 복잡한 작업에는 검색 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;

NULL 처리 — 검색 CASE가 더 유리한 이유

단순 CASE는 내부적으로 =를 사용하며, SQL에서 NULL = NULL은 절대 TRUE가 아닙니다. 따라서 단순 CASE는 NULL 열과 일치시킬 수 없습니다. 검색 CASE에서는 WHEN column IS NULL THEN ...을 작성할 수 있으므로 올바르게 작동합니다.

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

검색 CASE에서 열 결합

검색 CASE의 주요 장점은 각 WHEN 분기에서 완전히 다른 열을 참조하거나 함수를 호출할 수 있다는 것입니다. 따라서 단순 CASE로는 전혀 처리할 수 없는 복잡한 업무 규칙도 표현할 수 있습니다.

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;

ORDER BY에서 CASE 사용

두 가지 CASE 형식 모두 ORDER BY 안에서 사용할 수 있으며, 데이터에 원래 존재하지 않는 사용자 지정 정렬 순서를 만들 수 있습니다. 여기서는 단순 CASE로 우선순위 이름을 숫자에 매핑하여 행이 알파벳순이 아니라 업무 우선순위 순으로 정렬되게 합니다.

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 사용

검색 CASE를 SUM 또는 COUNT 안에 감싸는 것은 조건부 집계를 구현하는 대표적인 패턴이며, 때로는 피벗이라고도 합니다. 여러 쿼리를 실행하는 대신 한 번의 스캔으로 여러 범주의 합계를 만들 수 있습니다.

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;

올바른 형식 선택

실용적인 경험칙은 다음과 같습니다:

하나의 열을 정해진 값 목록에 매핑할 때는 단순 CASE를 사용하세요. 더 짧고 읽기 쉽습니다.
그 외에는 범위, NULL 확인, 여러 열을 사용하는 논리 또는 조건 내부의 함수 호출을 처리할 수 있는 검색 CASE를 사용하세요.

확실하지 않다면 검색 CASE를 사용하면 됩니다. 모든 단순 CASE는 검색 CASE로 다시 작성할 수 있지만, 그 반대는 불가능합니다.

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

빠른 확인

단순 CASE와 검색 CASE에 대한 이해도를 확인해 보세요.

레슨 복습

이 레슨에서 배운 내용은 다음과 같습니다:

단순 CASE — CASE 뒤에 표현식 하나를 배치하고, 각 WHEN에서 해당 표현식이 특정 값과 같은지 확인합니다. 하나의 열을 정해진 레이블 목록에 매핑할 때 가장 적합합니다.

검색 CASE — CASE 뒤에 표현식이 없고, 각 WHEN에 완전한 불리언 조건이 들어갑니다. 범위, NULL 확인, 여러 열을 사용하는 논리 및 함수 호출을 지원합니다.

두 형식 모두 분기를 위에서 아래로 평가하고, TRUE인 첫 번째 분기의 결과를 반환합니다. 일치하는 분기가 없고 ELSE도 없으면 결과는 NULL입니다. 최대한 유연하게 사용하려면 검색 CASE가 항상 안전한 선택입니다. 단순 CASE가 할 수 있는 모든 작업을 처리할 수 있고 그 이상도 가능하기 때문입니다.

자주 묻는 질문

“검색형 CASE와 단순 CASE” 강의는 무료인가요?

네 — “검색형 CASE와 단순 CASE” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“검색형 CASE와 단순 CASE”에서 뭘 배우나요?

CASE를 작성하는 두 가지 방법을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“검색형 CASE와 단순 CASE” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. CASE 표현식
  2. 검색형 CASE와 단순 CASE
  3. 데이터 구간화와 레이블 지정
  4. ORDER BY와 집계에서의 CASE
← SQL Academy(으)로 돌아가기