이 글에서는 SQL Server에서 CASE 문을 사용하는 방법을 구체적인 문법과 예제를 통해 자세히 설명합니다. 예제를 함께 살펴보면 CASE 문의 동작 방식을 쉽게 이해하고 실무 쿼리 작성에 바로 적용할 수 있습니다.
CASE 문이란?
CASE 문은 SQL Server에서 조건에 따라 서로 다른 값을 반환하도록 분기 처리를 수행하는 함수로, 일반 프로그래밍 언어의 IF-THEN-ELSE 문과 비슷한 역할을 합니다.
CASE 문에는 두 가지 형식이 있습니다.
- 단순 CASE(Simple CASE): 하나의 표현식을 여러 값과 비교하여 결과를 결정합니다.
- 검색 CASE(Searched CASE): 여러 불리언(Boolean) 조건식을 순서대로 평가하여 결과를 결정합니다.
두 형식 모두 선택 사항인 ELSE 절을 지원합니다.
문법
SQL Server에서 CASE 문을 사용하는 기본 문법은 다음과 같습니다.
단순 CASE(Simple CASE)
CASE input_expression
WHEN expression_1 THEN result_1
WHEN expression_2 THEN result_2
...
WHEN expression_n THEN result_n
ELSE else_result
END
검색 CASE(Searched CASE)
CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE else_result
END
매개변수 설명
- input_expression: 각 WHEN 절의 값과 비교할 입력 표현식입니다.
- expression_1, expression_2, ..., expression_n: 입력 표현식과 순차적으로 비교되는 표현식입니다. 비교 결과가 일치하면 해당 THEN 뒤의 결과를 반환하고, 나머지 비교는 더 이상 진행하지 않습니다.
- condition_1, condition_2, ..., condition_n: 나열된 순서대로 평가되는 조건입니다. 참(TRUE)으로 판정되는 첫 번째 조건을 만나면 그 결과를 즉시 반환하며, 이후 조건은 평가하지 않습니다. 모든 조건은 같은 데이터 타입이어야 합니다.
- result_1, result_2, ..., result_n: 조건이 참일 때 반환되는 결과값입니다. 모든 결과값 역시 같은 데이터 타입이어야 합니다.
주요 특징 및 주의사항
- 어떤 조건도 참이 아니면 CASE 문은 ELSE 절의 결과를 반환합니다.
- ELSE 절이 없고 참인 조건도 없다면 CASE 문은 NULL을 반환합니다.
- 조건은 나열된 순서대로 평가되며, 참으로 판정되는 순간 결과를 반환하고 이후 조건은 평가하지 않습니다.
- CASE 문은 SQL Server 2005, 2008, 2008 R2, 2012, 2014, 2016, 2017 등 이후 버전에서 사용할 수 있습니다.
예제
지금부터 SQL Server에서 CASE 문을 활용한 몇 가지 예제를 살펴보겠습니다.
예제 1: 단순 CASE(Simple CASE)
예를 들어 웹사이트의 카테고리 테이블(chuyenmuc)에서 Code 열 값을 기준으로 카테고리 이름을 변환해야 한다고 가정해 보겠습니다.
- Code = '01'이면 'Laptrinh-TipsMake.com' 반환
- Code = '02'이면 'Congnghe-TipsMake.com' 반환
- Code = '03'이면 'Cuocsong-TipsMake.com' 반환
- 그 외의 경우 'Khoahoc-TipsMake.com' 반환
SELECT tenchuyenmuc, Code,
(CASE code
WHEN 01 THEN 'Laptrinh-TipsMake.com'
WHEN 02 THEN 'Congnghe-TipsMake.com'
WHEN 03 THEN 'Cuocsong-TipsMake.com'
ELSE 'Khoahoc-TipsMake.com'
END) AS Chuyenmuc
FROM chuyenmuc
ORDER BY Code;
실행 결과는 다음과 같습니다.
| tenchuyenmuc | Code | Chuyenmuc |
|---|---|---|
| SQL Server | 01 | Laptrinh-TipsMake.com |
| Linux | 02 | Congnghe-TipsMake.com |
| Python | 01 | Laptrinh-TipsMake.com |
| JavaScript | 01 | Laptrinh-TipsMake.com |
| Android | 02 | Congnghe-TipsMake.com |
| Giai tri | 03 | Cuocsong-TipsMake.com |
| Cuocsong | 03 | Cuocsong-TipsMake.com |
| Science Curve | 04 | Khoahoc-TipsMake.com |
| Kham pha Science | 05 | Khoahoc-TipsMake.com |
예제 2: 검색 CASE(Searched CASE)
SELECT tenchuyenmuc,
CASE
WHEN code = 01 THEN 'Laptrinh-TipsMake.com'
WHEN code = 02 THEN 'Congnghe-TipsMake.com'
WHEN code = 03 THEN 'Cuocsong-TipsMake.com'
ELSE 'Khoahoc-TipsMake.com'
END
FROM chuyenmuc;
ELSE 절을 생략하여 다음과 같이 작성할 수도 있습니다.
SELECT tenchuyenmuc, Code,
(CASE code
WHEN 01 THEN 'Laptrinh-TipsMake.com'
WHEN 02 THEN 'Congnghe-TipsMake.com'
WHEN 03 THEN 'Cuocsong-TipsMake.com'
END) AS Chuyenmuc
FROM chuyenmuc
ORDER BY Code;
또는 검색 CASE 형식으로 다음과 같이 표현할 수도 있습니다.
SELECT tenchuyenmuc,
CASE
WHEN code = 01 THEN 'Laptrinh-TipsMake.com'
WHEN code = 02 THEN 'Congnghe-TipsMake.com'
WHEN code = 03 THEN 'Cuocsong-TipsMake.com'
END
FROM chuyenmuc;
ELSE 절을 생략하면, 어떤 조건도 참이 아닐 경우 CASE 문이 NULL을 반환한다는 점에 유의하세요.
예제 3: 두 개 이상의 조건 비교
다음 예제는 CASE 문에서 서로 다른 조건들을 비교하는 방법을 보여줍니다.
SELECT
CASE
WHEN code < 2 THEN 'Laptrinh-TipsMake.com'
WHEN code = 2 THEN 'Congnghe-TipsMake.com'
END
FROM chuyenmuc;
조건은 나열된 순서대로 차례로 비교된다는 점을 기억하세요. 참으로 판정되는 조건을 만나면 CASE 문은 즉시 결과를 반환하고 나머지 조건은 평가하지 않습니다. 따라서 의도한 대로 동작하도록 조건을 나열하는 순서를 신중하게 선택해야 합니다.
지금까지 SQL Server의 CASE 문 문법과 다양한 예제를 살펴보았습니다. 단순 CASE와 검색 CASE의 차이를 정확히 이해하고 상황에 맞게 활용하면 쿼리의 가독성과 유연성을 크게 높일 수 있습니다.