쿼리를 작성하다 보면 조건문이 필요할때가 있어요. 예를 들면 성별코드가 M 이면 '남자', W이면 '여자' 이렇게 특정 조건에 따라서 다른 결과물을 도출해 내야할때 이럴때 우리는 CASE문을 사용해요.
프로그램 랭귀지에는 보통 IF문을 사용하죠?(물론 CASE문도 있습니다만..)
SQL 쿼리에서는 CASE 문을 사용한답니다. 아래 나오는 내용 읽어보시고 SQL CASE문을 마스터 해보아요.
📌 CASE 문이란?
CASE 문은 SQL에서 조건에 따라 다른 값을 반환하는 조건 분기문입니다. 일종의 IF-ELSE 문 역할을 하며, SELECT문, WHERE절, ORDER BY절 등 다양한 곳에서 활용됩니다.
1. CASE 문 기본 문법
1-1 간단한 CASE (Simple CASE)
CASE 기준값
WHEN 비교값 THEN 결과
[WHEN 비교값 THEN 결과 ...]
[ELSE 기본값]
END
위와 같이 CASE 다음의 "기준값"에 비교대상이 되는 값을 넣습니다. 보통은 저자리에 table의 column name을 넣습니다.
그리고 WHEN 다음 "비교값" 자리에는 비교 조건을 넣습니다. 이때 WHEN / THEN 구문은 필요한 만큼 셋트로 작성하시면 됩니다. 조건 하나당 WHEN / THEN 셋트 하나 추가되는 겁니다.
1-2 검색 CASE (Searched CASE)
CASE
WHEN 조건 THEN 결과
[WHEN 조건 THEN 결과 ...]
[ELSE 기본값]
END
위와 같이 CAE다음 기준값이 없이 WHEN 다음 비교 조건을 기입합니다. (ex> sex_code = 'M')
그리고 해당 조건이 만족할때 반환할 결과값을 THEN 뒤에 작성하시면 됩니다. 마찬가지로 WHEN / THEN은 비교 조건의 수만큼 계속 확장해서 사용 가능합니다.
1-1, 1-2 두 문법의 차이는 값의 범위(< , >)를 비교 가능 여부에 있습니다. 두가지 문법은 각자 장단점이 있으나 머리가 너무 복잡해서 다 못외우겠다 하시는 분은 1-2 문법을 숙지하시면 됩니다. 그 이유는 1-1의 기능을 1-2가 모두 표현 가능하지만 1-2의 모든 기능을 1-1이 표현하지 못하기 때문이에요.
종류 | 설명 | 예시 |
1-1. Simple CASE | 하나의 컬럼 값을 기준으로 비교 | CASE Color WHEN 'Red' THEN ... |
1-2. Searched CASE | 조건을 직접 명시 | CASE WHEN Price > 100 THEN ... |
2. CASE 문 기본 사용 예제
SELECT Name
, Score
, CASE
WHEN Score >= 90 THEN 'A'
WHEN Score >= 80 THEN 'B'
WHEN Score >= 70 THEN 'C'
ELSE 'F'
END AS Grade
FROM Students;
📌 Score 값에 따라 각각의 등급(A,B,C,F)으로 변환되어 Grade 컬럼에 표시됩니다.
위 예제는 1-2의 문법으로 작성된 예시이며 WHEN 절을 보시면 Score >= 90 처럼 범위 조건이 사용된것을 확인할 수 있습니다.
이런 조건은 1-1의 문법으로는 표현할 수 없는 조건이죠.
그럼 1-1 문법의 예시도 한번 볼까요?
SELECT name
, age
, CASE sex_code
WHEN 'M' THEN '남자'
WHEN 'W' THEN '여자'
ELSE ''
END AS sex_nm
FROM Students;
이와 같이 1-1 문법은 비교대상 column(sex_code)를 명시해 놓고 WHEN 절에 비교값(M,W)를 작성해여 해당 값인 경우 표현될 결과값을 THEN 절에 작성합니다. 이 문법은 비교조건을 간략하게 표시하여 보기는 좋지만 범위 비교를 할 수 없다는 치명적인 단점이 있어요.
3. 실무 예제: 회원 등급 태그 붙이기
예시 테이블
CREATE TABLE Members (
MemberID INT
, Name NVARCHAR(50)
, Point INT
);
CASE 문 활용
SELECT Name
, Point
, CASE
WHEN Point >= 1000 THEN 'VIP'
WHEN Point >= 500 THEN 'Gold'
WHEN Point >= 100 THEN 'Silver'
ELSE 'Bronze'
END AS MemberLevel
FROM Members;
✅ 결과: 포인트에 따라 자동으로 등급 태그(VIP, Cold, Silver, Bronze)가 부여됩니다.
4. CASE 문은 WHERE나 ORDER BY에서도 가능
WHERE 절에서 사용
SELECT *
FROM Orders
WHERE
CASE
WHEN Status = 'Pending' THEN 1
ELSE 0
END = 1;
💡 상태가 'Pending'인 주문을 '1'로 바꾸어서 필터 합니다.
SELECT ProductName, StockQty
FROM Products
ORDER BY
CASE
WHEN StockQty = 0 THEN 1
ELSE 0
END ASC;
💡 재고가 없는 상품을 먼저 정렬할 수 있습니다.
📝 마무리 정리
- CASE 문은 SQL의 조건 분기 로직을 간결하게 표현해주는 강력한 도구입니다.
- SELECT뿐 아니라 WHERE, ORDER BY 등 다양한 구문에서 유연하게 사용할 수 있습니다.
- 실무에서는 고객 등급, 상태 분류, 가격 범위 구분 등에 자주 사용됩니다.
2025.06.05 - [MS-SQL] - [MS-SQL] CONVERT 함수 완벽 이해하기 – 실습 예제와 함께 배우는 변환 함수
[MS-SQL] CONVERT 함수 완벽 이해하기 – 실습 예제와 함께 배우는 변환 함수
🔍 요약: MS-SQL 형변환 함수인 CONVERT 함수의 개념과 사용방법을 설명하고 실제 예제를 통하여 실습해 봅니다. 실전에서 가장 많이 사용되는 유형에 대해서도 알아봅니다. QUERY를 사용하다 보면
kjh11225it.tistory.com
'MS-SQL' 카테고리의 다른 글
[MS-SQL] SUBSTRING, LEFT, RIGHT 함수 완전정복 – 문자열 추출 실무 예제 정리 (0) | 2025.06.09 |
---|---|
MS-SQL에서는 LPAD 없다고요? 직접 구현하는 방법까지 알려드립니다 (0) | 2025.06.08 |
[MS-SQL] DATEADD 함수 사용법 – 날짜 더하고 빼는 실무 활용 예제 (0) | 2025.06.07 |
[MS-SQL] DATEDIFF 함수로 날짜 차이 계산하기 – 실무 예제로 쉽게 배우기 (0) | 2025.06.06 |
[MS-SQL] CONVERT 함수 완벽 이해하기 – 실습 예제와 함께 배우는 변환 함수 (0) | 2025.06.05 |