DataBase/RDB

SQL-CASE 표현식

보라색츄르 2021. 12. 14. 01:36

CASE 표현식을 사용하면 IF THEN ELSE 논리를 평가할 수 있다. 

자바에서 WHEN절, IF절과 비슷하다.

 

 

위와 같이 TB_PRODUCT 테이블의 데이터를 이용하여 CASE 표현식의 예를 들어보겠다.

 

 

 

1. 단순 CASE표현식

 

1-1. CASE WHEN THEN ELSE END문

설명 : PRODUCT_NAME이 사과라면 RED, 사과가 아니라면 NOT RED를 출력해라 

SELECT PRODUCT_NAME 
	  , CASE PRODUCT_NAME 
	  		WHEN '사과' THEN 'RED'
	  		ELSE 'NOT RED'
	  		END AS COLOR
FROM TB_PRODUCT;

<결과>

 

1-2. CASE WHEN THEN END문

SELECT PRODUCT_NAME 
	  , CASE PRODUCT_NAME 
	  		WHEN '사과' THEN 'RED'
	  		END AS COLOR
FROM TB_PRODUCT;

<결과 : 일치하는 WHEN절이 없는 경우 NULL이 반환된다.>

 

1-3. 데이터 타입이 동일하지 않으면?

SELECT PRODUCT_PRICE 
	  , CASE PRODUCT_PRICE 
	  		WHEN '500' THEN 5
	  		END AS PRODUCT_PRICE_SIMPLE
FROM TB_PRODUCT;

<결과 : 에러발생>

 

<올바른 식>

SELECT PRODUCT_PRICE 
	  , CASE PRODUCT_PRICE 
	  		WHEN 500 THEN '5'
	  		END AS PRODUCT_PRICE_SIMPLE
FROM TB_PRODUCT;

<결과>

 

 

 

 

2. 검색 CASE 표현식

 

2-1. BETWEEN을 활용한 검색 CASE표현식

SELECT PRODUCT_PRICE 
	  , CASE 
	  		WHEN PRODUCT_PRICE BETWEEN 100 AND 1000 THEN 1
	  		WHEN PRODUCT_PRICE BETWEEN 1000 AND 2000 THEN 2
	  		WHEN PRODUCT_PRICE BETWEEN 2000 AND 3000 THEN 3
	  		ELSE 0
	  		END AS PRODUCT_PRICE_SIMPLE
FROM TB_PRODUCT;

<결과 : 만약 ELSE가 없다면 위의 글과 마찬가지로 WHEN절에 해당하지 않는 조건은 NULL이 반환된다.>

(참고 : BETWEEN이란? 범위를 평가하는 조건문이다.)

 

 

 

2-2. 등가 부호 활용

SELECT PRODUCT_PRICE 
	  , CASE 
	  		WHEN PRODUCT_PRICE >=10000 THEN 10
	  		WHEN PRODUCT_PRICE >=5000 THEN 5
	  		WHEN PRODUCT_PRICE >=1000 THEN 1
	  		END AS PRODUCT_PRICE_SIMPLE
FROM TB_PRODUCT;

<결과>