CASE 표현식
쿼리 안에서 IF/THEN 논리를 사용합니다.
CASE 표현식은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
SQL의 분기 논리
때로는 질의가 결정을 내려야 합니다. 이 조건이면 이렇게 하고, 그렇지 않으면 다르게 처리하기와 같은 경우입니다. SQL에서는 바로 이런 일을 위해 CASE 표현식을 제공합니다.
CASE를 사용하면 SELECT 안에서 조건에 따라 서로 다른 값을 반환할 수 있습니다. SQL의 if/else 연쇄문이라고 생각하시면 됩니다.
SELECT name,
CASE WHEN price > 100 THEN 'expensive'
ELSE 'affordable'
END AS price_band
FROM products;CASE의 구성
CASE 표현식은 몇 가지 구성 요소로 이루어집니다:
WHEN condition THEN value— 하나 이상의 분기ELSE value— 선택적인 대체값END— 표현식을 닫습니다(필수!)
SQL은 WHEN 분기를 위에서 아래로 평가하며, 참인 첫 번째 분기의 값을 반환합니다.
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
ENDCASE는 값을 반환합니다
핵심은 CASE 표현식이 각 행마다 하나의 값으로 평가된다는 점입니다. 값을 생성하므로 값이 허용되는 곳이면 어디서든 사용할 수 있습니다 — SELECT 목록, WHERE, ORDER BY, 심지어 함수 안에서도 사용할 수 있습니다.
여기서는 각 주문에 간단한 상태를 표시합니다.
SELECT order_id,
CASE WHEN shipped_at IS NOT NULL THEN 'shipped'
WHEN paid_at IS NOT NULL THEN 'paid'
ELSE 'pending'
END AS status
FROM orders;첫 번째 일치 항목이 선택됩니다
순서가 중요합니다. SQL은 각 WHEN을 순서대로 확인하고 처음으로 참이 되는 항목에서 멈춥니다. 뒤의 분기도 일치할 수 있더라도 무시됩니다.
아래에서는 1000을 초과하는 주문이 '대형'으로 처리되고 '중형'으로는 처리되지 않습니다. 처음 일치하는 분기가 선택되기 때문입니다.
SELECT order_id, total,
CASE WHEN total >= 1000 THEN 'large'
WHEN total >= 100 THEN 'medium'
ELSE 'small'
END AS size_band
FROM orders;ELSE 분기
ELSE 분기는 모든 경우를 처리합니다. 어떤 WHEN 조건도 참이 아니면 CASE는 ELSE 값을 반환합니다.
ELSE를 생략하고 일치하는 항목이 없으면 CASE는 NULL을 반환합니다. 이는 예상하지 못한 NULL 값이 생기는 흔한 원인이므로, 정해진 대체값이 필요할 때는 명시적인 ELSE를 추가하십시오.
SELECT name,
CASE WHEN stock = 0 THEN 'out of stock' END AS note
FROM products;
-- rows with stock > 0 get NULL in note (no ELSE)조건에는 무엇이든 사용할 수 있습니다
WHEN 조건은 불리언 표현식일 뿐이며, WHERE 절에 작성하는 것과 같은 종류입니다. 비교, AND, OR, BETWEEN, IN, LIKE 등을 사용할 수 있습니다.
SELECT email,
CASE WHEN country IN ('US','CA') AND age >= 18 THEN 'eligible'
WHEN email LIKE '%@test.com' THEN 'test account'
ELSE 'review'
END AS segment
FROM users;결과 자료형은 호환되어야 합니다
CASE의 모든 분기는 호환되는 자료형의 값을 반환해야 합니다. 열에는 하나의 자료형이 필요하기 때문입니다. 텍스트와 숫자를 섞으면 오류가 발생하거나 예상하지 못한 형 변환이 일어납니다.
한 분기에서는 숫자를, 다른 분기에서는 텍스트를 사용해야 한다면 자료형이 맞도록 명시적으로 형 변환하십시오.
SELECT product_id,
CASE WHEN on_sale THEN price * 0.9
ELSE price
END AS effective_price -- all branches numeric: good
FROM products;WHERE에서 CASE 사용하기
CASE는 값을 생성하므로 그 결과를 WHERE 절 안에서 비교할 수 있습니다. 동적인 조건 적용 규칙을 만들 때 유용합니다.
다만 일반적인 불리언 논리를 WHERE에 직접 작성하는 편이 더 명확한 경우가 많습니다. 분기 구조가 조건을 실제로 단순하게 만들어 줄 때만 WHERE에서 CASE를 사용하십시오.
SELECT *
FROM orders
WHERE CASE WHEN priority = 'high' THEN total > 0
ELSE total > 500
END;CASE 중첩하기
여러 층의 논리를 표현하기 위해 하나의 CASE를 다른 CASE의 분기 안에 넣을 수 있습니다. 작동은 하지만, 지나치게 중첩된 표현식은 읽기 어려워집니다.
중첩은 얕게 유지하십시오. 복잡해진다면 별도의 열이나 조회 테이블을 사용하는 편이 일반적으로 더 깔끔합니다.
SELECT order_id,
CASE WHEN region = 'EU' THEN
CASE WHEN total > 100 THEN 'EU big'
ELSE 'EU small' END
ELSE 'other'
END AS bucket
FROM orders;집계 함수와 CASE
강력한 패턴 중 하나는 CASE를 SUM이나 COUNT 같은 집계 함수 안에 넣는 것입니다. 이렇게 하면 한 번의 처리로 조건에 따라 행을 세거나 합산할 수 있습니다. 이를 조건부 집계 또는 피벗이라고 부르기도 합니다.
SELECT
COUNT(*) AS total_orders,
SUM(CASE WHEN status = 'shipped' THEN 1 ELSE 0 END) AS shipped,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending
FROM orders;CASE에서 의도적으로 NULL 반환하기
분기에서 NULL을 반환하는 것이 정확히 원하는 결과일 때도 있습니다. 예를 들어 표시하고 싶지 않은 값을 비워 두거나, NULL을 무시하는 이후 집계 함수에 전달할 수 있습니다.
여기서는 대형 주문만 합계를 유지하고, 나머지는 NULL이 되므로 AVG가 이를 건너뜁니다.
SELECT order_id,
CASE WHEN total >= 1000 THEN total
ELSE NULL
END AS large_order_total
FROM orders;빠른 확인
total = 1500인 행에 대해 다음 표현식을 생각해 보세요:
CASE WHEN total >= 100 THEN 'medium' WHEN total >= 1000 THEN 'large' ELSE 'small' END
어떤 값을 반환할까요?
복습: CASE 표현식
SQL에서 조건부 논리의 핵심을 배웠습니다:
CASE WHEN ... THEN ... ELSE ... END는 행마다 하나의 값을 반환합니다- 분기는 위에서 아래로 확인되며, 첫 번째 일치가 우선됩니다
ELSE를 생략하면 일치하는 항목이 없을 때NULL을 반환합니다- 모든 분기는 호환되는 형식을 반환해야 합니다
CASE는SELECT,WHERE, 그리고 집계 함수 내부에서 사용할 수 있습니다
다음으로 CASE의 두 구문 형식을 비교하겠습니다.
SELECT name,
CASE WHEN price > 100 THEN 'expensive'
WHEN price > 20 THEN 'mid'
ELSE 'cheap'
END AS tier
FROM products;자주 묻는 질문
“CASE 표현식” 강의는 무료인가요?
네 — “CASE 표현식” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“CASE 표현식”에서 뭘 배우나요?
쿼리 안에서 IF/THEN 논리를 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“CASE 표현식” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.