DB/Oracle

[오라클 함수] 상황에 따라 다른 데이터를 반환하는 DECODE 함수와 CASE문

각시탈코더 2022. 2. 10. 15:28

 특정 열 값이나 데이터 값에 따라 어떤 데이터를 반환할 지 정할 때는 DECODE 함수 또는 CASE문을 사용한다.

 

DECODE 함수

 DECODE 함수는 기준이 되는 데이터를 먼저 지정한 후 해당 데이터 값에 따라 다른 결과 값을 내보내는 함수다.

 

 

DECODE([검사 대상이 될 열 또는 데이터, 연산이나 함수의 결과],
	   [조건1], [데이터가 조건1과 일치할 때 반환할 결과],
       [조건2], [데이터가 조건2와 일치할 때 반환할 결과],
       ...
       [조건n], [데이터가 조건n과 일치할 때 반환할 결과],
       [위 조건1~조건n과 일치한 경우가 없을 때 반환할 결과])

 

 

EMP 테이블에서 직책이 MANAGER인 사람은 급여의 10%를 인상한 급여, SALESMAN인 사람은 급여의 5%, ANALYST인 사람은 그대로, 나머지는 3%만큼 인상된 급여를 보여주는 쿼리문을 DECODE함수를 사용하여 작성해보자.

 

 

SELECT EMPNO, ENAME, JOB, SAL,
	   DECODE(JOB,
       			'MANAGER', SAL*1.1,
                'SALESMAN', SAL*1.05,
                'ANALYST', SAL,
                SAL*1.03) AS UPSAL
FROM EMP;

 

 

 

 

CASE문

 DECODE 함수와 마찬가지로 CASE문도 조건에 따라 출력할 데이터가 필요할 때 사용한다. DECODE와의 차이점은 DECODE는 기준 데이터를 명시하고 그 값에 따라 반환 데이터를 정하는 반면 CASE문은 각 조건에 사용하는 데이터가 서로 상관없어도 된다. 또한 기준 데이터 값이 같은(=) 데이터 외에 다양한 조건을 사용할 수 있다.

 

 

CASE [검사 대상이 될 열 또는 데이터, 연산이나 함수의 결과(선택)]
	WHEN [조건1] THEN [조건1의 결과 값이 true일 때, 반환할 결과]
    WHEN [조건2] THEN [조건2의 결과 값이 true일 때, 반환할 결과]
    ...
    WHEN [조건n] THEN [조건n의 결과 값이 true일 때, 반환할 결과]
    ELSE [위 조건1~조건n과 일치하는 경우가 없을 떄 반환할 결과]
END

 

 

 앞서 DECODE 함수에서 사용한 조건과 같은 조건(MANAGER 10%, SALESMAN 5%, ANALYST 그대로, 나머지 3%)으로 데이터를 반환하면 다음과 같은 쿼리문을 작성할 수 있다.

 

 

SELECT EMPNO, ENAME, JOB, SAL,
	CASE JOB
    	 WHEN 'MANAGER' THEN SAL*1.1
         WHEN 'SALSMAN' THEN SAL*1.05
         WHEN 'ANALYST' THEN SAL
         ELSE SAL*1.03
    END AS UPSAL
FROM EMP;

 

 

 


출처:Do it! 오라클로 배우는 데이터베이스 입문(저자:이지훈 출판사:이지스퍼블리싱)