내가 보려고 정리하는 SQL - (7) CASE WHEN 표현식
in Programming on SQL - Study
CASE WHEN 표현식 예시를 담아보았습니다.🧐
- 기본 사용법
- 비교 연산자(>, <, =, <>), NULL 연산자(IS NULL, IS NOT NULL)을 사용하여 조건을 부여할 수 있음
- 논리 연산자(AND, OR)를 사용하여 여러 개의 조건을 부여할 수 있음
- ELSE 부분은 생략이 가능하며 생략할 경우 조건에 맞지 않으면 NULL을 반환함
SELECT * ,CASE WHEN '조건' THEN '조건에 만족할 때 출력할 데이터' ELSE '조건에 만족하지 않을 때 출력할 데이터' END FROM 테이블
CASE WHEN 많이 쓰는 이유?
- 프로그래밍 언어에서 IF 문과 비슷하며, 조건에 따라 서로 다른 값을 추출하여 칼럼을 만들 수 있음
- WHEN & THEN은 여러개를 입력할 수 있어서 다중으로 조건을 설정할 수 있음
- NARROW TYPE → WIDE TYPE 펼치기
예제 1-1) 조건을 여러개 부여
- PRD_NUM1 새 칼럼 조건 : 제품명이 P001이면 제품1로, P002면 제품2로 바꾸고 나머지는 NULL로 반환함
SELECT * ,CASE WHEN PRD_NUM = 'P001' THEN '제품1' WHEN PRD_NUM = 'P002' THEN '제품2' ELSE NULL END AS PRD_NUM1 FROM PRODUCT_SALES
(조회결과)
예제 1-2) 조건을 여러개 부여 - 조건 하나만 적용
- PRD_NUM1 새 칼럼 조건 : 제품명이 P001이면 제품1로, P002면 제품2로 바꾸고 나머지는 NULL로 반환함
SELECT * ,CASE PRD_NUM WHEN 'P001' THEN '제품1' WHEN 'P002' THEN '제품2' ELSE NULL END AS PRD_NUM1 FROM PRODUCT_SALES
(조회결과)
예제2) 조건을 여러개 부여 - 순서 조건
- PAY_PRC_TYPE 새 칼럼 조건 : 제품명이 P001일때 지불금이 15,000원이 이상이면 ‘15000’ & 13,000원 이상 15,000원 미만이면 ‘13000’ & 11,000원 이상 13,000원 미만이면 ‘11000’
- CASE WHEN은 순서 조건이 있어서 첫번째 순서부터 차례대로 값이 매칭되면 그 뒤 순서에 대한 매칭은 수행되지 않음
SELECT * ,CASE WHEN PRD_NUM = 'P001' AND PAY_PRC >= 15000 THEN '15000' WHEN PRD_NUM = 'P001' AND PAY_PRC >= 13000 THEN '13000' WHEN PRD_NUM = 'P001' AND PAY_PRC >= 11000 THEN '11000' ELSE NULL END AS PAY_PRC_TYPE FROM PRODUCT_SALES
(조회결과)
예제3) WHERE 절에 사용
- WHERE 절에도 CASE 표현식을 사용할 수 있으며, 단순 필터링 용도로만 사용됨
SELECT * FROM PRODUCT_SALES WHERE PRD_NUM = 'P001' AND (CASE WHEN PRD_PRC >= 13000 THEN '13000' WHEN PRD_PRC >= 12000 THEN '12000' WHEN PRD_PRC >= 11000 THEN '11000' END) = '12000'
(조회결과)
예제4) CASE문 중첩 사용
- CASE 표현식은 중첩해서 사용할 수 있으며, 중첩해서 사용할 경우 쿼리문의 가독성이 떨어질 수 있으므로 주의해서 사용해야함
- PRD_PRC_TYPE 새 칼럼 조건 : 제품명이 P001일 때 금액에 따라 HIGH / MIDIUM / LOW로 등급이 매겨지고, P002일 때도 금액에 따라 HIGH / MIDIUM / LOW로 등급을 매김
SELECT PRD_NUM, PRD_PRC ,CASE PRD_NUM WHEN 'P001' THEN CASE WHEN PRD_PRC >= 13000 THEN 'HIGH' WHEN PRD_PRC >= 12000 THEN 'MIDIUM' WHEN PRD_PRC >= 11000 THEN 'LOW' END WHEN 'P002' THEN CASE WHEN PRD_PRC >= 20000 THEN 'HIGH' WHEN PRD_PRC >= 19000 THEN 'MIDIUM' WHEN PRD_PRC >= 18000 THEN 'LOW' END END AS PRD_PRC_TYPE FROM PRODUCT_SALES
(조회결과)