Database/개념정리

[DataBase] Oracle SQL 내장 함수 - 5 (형 변환 함수 2) DECODE / CASE

Sehyeok20 2021. 2. 18. 18:39
반응형

1. DECODE 함수

 - 특정 열 값이나 데이터 값에 따라 어떤 데이터를 반환할 지 정할 때 사용

 - DECODE( [검사 대상이 될 열 또는 데이터, 연산이나 함수의 결과],

                [조건1], [데이터가 조건 1과 일치할 때 반환할 결과],

                [조건2], [데이터가 조건 2과 일치할 때 반환할 결과],

                ....

                [조건n], [데이터가 조건 n과 일치할 때 반환할 결과],

                [위 조건들에 부합하는 경우가 없을 때 반환할 결과] )

 - 즉 DECODE( 컬럼, 조건1, 결과1, 조건2, 결과2, ... 조건n, 결과n, 예외 ) 라고 할 수 있다.

 

EMP 테이블에서

1) 직책이 MANAGER인 사람은 급여의 10% 인상

2) SALESMAN인 사람은 급여의 5% 인상

3) ANALYST인 사람은 그대로

4) 나머지는 3% 만큼 인상

위 조건을 만족하는 SQL문을 작성해보자.

select ename, job, sal, 
    decode(job, 'MANAGER', sal*1.1, 'SALSESMAN', sal*1.05, 'ANALYST', sal, sal*1.03) as upsal 
    from emp;

결과 1

DECODE 함수에서 컬럼(job)과 조건 결과를 차례로 넣었을 때 얻을 수 있는 결과값이 UPSAL에 잘 출력되었다.

 

 

2. CASE 문

 - 열 값에 따라서 출력이 달라진다.

 - CASE [검사 대상이 될 열 또는 데이터, 연산이나 함수의 결과], 

           WHEN [조건1] THEN [조건1의 결과 값이 TRUE 일때 반환할 결과],

           WHEN [조건2] THEN [조건2의 결과 값이 TRUE 일때 반환할 결과],

           ...

           WHEN [조건n] THEN [조건n의 결과 값이 TRUE 일때 반환할 결과],

           ELSE [위 조건에 부합하는 경우가 없을 때 반환할 결과]

           END

 

DECODE의 예시 문제를 CASE문을 이용하여 해결해보자.

select ename, job, sal, 
    case job 
    when 'MANAGER' then sal*1.1
    when'SALSESMAN' then sal*1.05
    when 'ANALYST' then sal
    else sal*1.03
    end as upsal2
    from emp;

결과 2

결과 1과 똑같은 결과 2가 나왔다.

각 조건에 부합하는 급여가 UPSAL2에 잘 출력 된 것을 볼 수 있다.

반응형