홈 › SQL 중급 › 05 / 11

조건 로직: CASE·DECODE·IIF

섹션 6진행 0 / 11

조건 로직: CASE · DECODE · IIF

값을 조건에 따라 다르게 보여주거나 계산하는 일은 거의 모든 쿼리에 등장합니다. 표준 SQL 은 이 조건 로직을 CASE 하나로 표현하고, Oracle 의 DECODE, MySQL 의 IF(), MSSQL 의 IIF·CHOOSE 는 DB 마다 따로 얹어 놓은 편의 함수입니다. 이 레슨은 CASE 의 두 형태와 평가 순서, 조건부 집계, UPDATE 에서의 CASE, 그리고 DB 별 편의 함수와 CASE 의 관계를 직접 실행해 확인합니다.

1. 왜 배우는가

회원 등급을 급여나 포인트 구간으로 나누거나, 주문 상태를 한글 라벨로 바꾸거나, 집계 결과를 상태별로 한 줄 리포트로 펼치는 작업은 실무 쿼리에서 거의 매번 나옵니다. 이런 요구는 모두 "조건에 따라 다른 값을 쓴다"는 하나의 문제이고, SQL 표준은 이를 CASE 라는 하나의 표현식으로 풀어냅니다.

IF 문처럼 절차형 언어의 분기와 비슷하지만, CASE 는 문장이 아니라 값을 돌려주는 식이라 SELECT·WHERE·ORDER BY·UPDATE 어디에나 쓸 수 있습니다.

이 레슨은 CASE 의 두 형태(단순·검색)와 조건 평가 순서, ELSE 생략 시 동작을 먼저 확인합니다. 이어서 SUM(CASE ...)·COUNT(CASE ...) 로 행을 열로 펼치는 조건부 집계, UPDATE 문에서 CASE 로 여러 조건을 한 번에 반영하는 패턴을 다룹니다.

Oracle 전용 DECODE, MySQL 의 IF(), MSSQL 의 IIF·CHOOSE 가 CASE 와 어떻게 다른지도 실행해 비교합니다.

DECODE·IF()·IIF·CHOOSE 는 각자 자기 DB 에만 있는 함수라 이식성이 없습니다. 같은 로직을 표준 CASE 로 옮기면 네 DB 어디서나 그대로 쓸 수 있으므로, 여러 DB 를 오가는 실무에서는 CASE 를 기본으로 삼는 편이 안전합니다.