본문 바로가기
Study/Database

Oracle DECODE함수

by 얏옹이 2023. 6. 26.
반응형

조건식

 

조건에 따라서 그 조건이 참일때와 그렇지 않을때를 구별해 각각의 조건에 따라 작성된 코드가 수행되는것이 조건문이다.

 

Oracle 쿼리에서도 이러한 조건식을 작성할때가 있는데 이때 주로 사용하는것이 DECODE와 CASE WHEN THEN 이다.

 

엄밀히 구별해보자면 DECODE는 오라클 함수, CASE WHEN THEN은 SQL 문법이다.

 

DECODE와 CASE WHEN THEN 둘다 조건식에 따른 결과물을 다양하게 보여주는 기능을 하지만 

 

DECODE는 표준 SQL 함수는 아니라고 한다. 따라서 최근에는 CASE WHEN THEN 사용을 좀더 권장하기도 한다는데...

 

사실 DECODE를 알아보기 위해서 검색하다가 표준 SQL 문이 아니라고 해서, CASE WHEN THEN까지 함께 정리하고자 한다.

 

반응형

 

먼저 DECODE.

 

함수이다. 따라서 () 괄호를사용해주고 괄호 안에 매개변수? 인자?를 입력하여 결과값을 리턴해준다.

 

SELECT DECODE(gender, '남자','M','여자','F')
FROM EMP;

 

EMP 테이블에서 gender 컬럼의 값을 조회하는데 값이 남자이면 M으로 출력, 여자면 F로 출력해줘 라는 뜻이다.

 

if문으로 해석해보자면 아래와 같다

 

if(gender.equals("남자")) {
	System.out.println("M");
} else if(gender.equals("여자")) {
	System.out.println("F");
}

 

근데 여기서 else가 빠져있다. else에 해당되는 문구도 지정이 가능하다. 하지만 필수 요소는 아니다. 여기서 else에 해당되는 문구를 지정해주지 않았기때문에 만약 "남자"이거나 "여자"가 아닌 값은 NULL로 리턴된다.

 

만약 NULL이 아닌 "성별불문" 이라고 출력을 해주고 싶다 라고 하면 아래와 같이 사용할수 있다.

 

SELECT DECODE(gender, '남자','M','여자','F', '성별불문')
FROM EMP;

 

이는 곧 다음과 같다

 

if(gender.equals("남자")) {
	System.out.println("M");
} else if(gender.equals("여자")) {
	System.out.println("F");
} else {
 	System.out.println("성별불문");
}

 

조금 더 긴 DECODE 예시를 보겠다.

 

이러한 테이블이 있다고 가정하자.

 

SELECT ID, 
	FIRST_NAME, 
    LAST_NAME, 
    DECODE(DEPARTMENT, 'HR', 'Human Resources', 'IT', 'Information Technology', 'FINANCE', 'Financial Department', 'SALES', 'Sales Department', 'Unknown Department') AS DEPARTMENT_NAME
FROM EMPLOYEES;

 

이는 곧 DEPARTMENT 컬럼의 값이 HR일때는 Human Resources IT 일때는 Information Technology , FINANCE일때는 Financial Department SALES 일때는 Sales Department 로 출력해주고 그 외에는 모두 Unknown Department로 표기해주겠다는 말이다.

 

결과값은 다음과 같다.

 

 

이렇게 DECODE 오라클 함수에 대해서 알아보았다.

 

잘 사용하면 편리하겠지만 조금 마음에 걸리는건 표준 SQL 함수가 아니라는것과, 많은 데이터를 다루게 되면 코드의 길이가 길어져서 가독성이 좀 떨어질거 같다는 생각이다.

반응형