검색형 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- CASE 표현식
- 검색형 CASE와 단순 CASE
- 데이터 구간화와 레이블 지정
- ORDER BY와 집계에서의 CASE