본문 바로가기
Oracle SQL

조건 함수

by Nowkeeh Ahc

 오라클은 Java와 같은 프로그래밍 언어의 IF문처럼 조건에 따라서 SQL 문을 처리할 수 있는 조건함수인 DECODE 함수와 CASE 함수를 제공한다.

 

DECODE

 DECODE 함수는 주어진 조건이 일치할 경우에 지정된 반환값을 리턴하는 조건함수로서 SQL 문을 보다 간략히 만드는 데 도움을 준다. DECODE 함수는 아래와 문법과 같이 특정 컬럼에 대해 조건값을 비교하여 동일하면 결과값을 반환하고, 비교값이 없을 경우 기본값을 반환한다. 기본값이 없는 경우에는 널을 반환한다.

DECODE (컬럼, , 결과, [, 결과, ] [기본 값])

 DECODE 함수는 정확한 특정 조건에 대해서만 처리할 수 있기 때문에 범위 조건이나 부정 조건 등의 처리는 불가능하다.

ex. 공급사 테이블의 사업자 번호를 보고 해당 공급사의 관할세무서를 출력하여라. (참고로 사업자번호 앞 3자리가 100이면 서울지방국세청, 200이면 중부지방국세청, 300이면 대전지방국세청, 400이면 광주지방국세청, 600이면 부산지방국세청이다.)

SELECT 공급사ID, DECODE(SUBSTR(사업자번호,1,3), '100', '서울지방국세청', 
	'200', '중부지방국세청', '300', '대전지방국세청', '400', '광주지방국세청', 
	'600', '부산지방국세청') 관할세무서 
FROM 공급사;

 

CASE

 DECODE 함수는 반드시 조건이 일치하는 경우에만 사용 가능하지만, CASE 함수는 프로그래밍의 IF ~ ELSE IF 문처럼 다양한 조건의 범위와 비교를 가능하게 한다. 따라서 CASE 함수는 다양한 비교 연산자를 이용하여 조건을 설정할 수 있다.

CASE 컬럼 WHEN 조건 THEN 결과
[WHEN 조건 THEN 결과

ELSE 결과]
END

 CASE 함수는 컬럼의 값이 WHEN의 조건과 일치하는 결과를 검색하여 기술한 조건과 동일하면 주어진 결과값을 반환하고, 일치하는 조건이 없는 경우 ELSE 절의 결과를 반환한다. ELSE 절이 없는 경우에는 널을 반환하며, 반드시 END 키워드를 사용하여 종료해야 한다.

ex.고객의 나이를 기준으로 4개의 그룹으로 나누려 한다. 29세까지는 '1020'그룹, 30세 이상 49세 이하까지는 '3040'그룹, 50세 이상 69세 이하까지는 '5060'그룹, 70세 이상부터는 '7080'그룹으로 나누어 '연령대' 컬럼으로 출력하여라. (고객ID, 고객명, 고객전화번호, 멤버십등급, 연령대 컬럼을 출력)

SELECT 고객ID, 고객명, 고객전화번호, 멤버십등급, 
	CASE WHEN 생년월일>= '1990-01-01' THEN '1020'
	     WHEN 생년월일 BETWEEN '1970-01-01' AND '1989-12-31' THEN '3040'
	     WHEN 생년월일 BETWEEN '1950-01-01' AND '1969-12-31' THEN '5060'
	     WHEN 생년월일 < '1949-12-31' THEN '7080'
	END 연령대
FROM 고객;

 


This post was written based on what I read and studied the book below.

http://www.yes24.com/Product/Goods/99002458

댓글