DECODE

  • 값에 따라 반환값이 결정되는 구문이다.
  • decode(칼럼명, 값1, 반환값1,
       칼럼명, 값2, 반환값2,
              값3, 반환값3)
    

ex)

-- 각 사원의 부서이름을 가져온다.
-- 10 : 인사과, 20 : 개발부, 30 : 경영 지원팀
-- 40 : 생산부
select empno, ename,
    decode(deptno, 10, '인사과',
                   20, '개발부',
                   30, '경영지원팀',
                   40, '생산부')
from emp;

ex)

-- 직급에 따라 인상된 급여액을 가져온다.
-- CLEAK : 10%
-- SALESMAN : 15%
-- PRESIDENT : 20%
-- MANAGER : 5%
-- ANALYST : 20%
select empno, ename, job,
    decode(job, 'CLEAK', sal *1.1,
                'SALESMAN', sal *1.15,
                'PRESIDENT', sal *1.2,
                'MANAGER', sal * 1.05,
                'ANALYST', sal * 1.2)
from emp;

CASE

  • 조건에 따라 반환값이 결정되는 구문이다.
  • case when 조건식1 then 반환값1
     when 조건식2 then 반환값2
    
    end

ex)

-- 급여액별 등급을 가져온다.
-- 1000미만 : C등급
-- 1000이상 2000미만 : B등급
-- 2000이상 : A등급
select empno, ename,
    case when sal < 1000 then 'C등급'
            when sal >= 1000 and sal < 2000 then 'B등급'
            when sal >= 2000 then 'A등급'
    end
from emp;

ex)

-- 직원들의 급여를 다음과 같이 인상한다.
-- 1000이하 : 100%
-- 1000초과 2000미만 : 50%
-- 2000이상 : 200%
select empno, ename,
    case when sal<=1000 then sal*2
            when sal>1000 and sal<2000 then sal *1.5
            when sal>=2000 then sal*3
            end
from emp;

DECODE를 사용하면 값에 따라 반환값을 결정할 수 있다.
CASE를 사용하면 조건에 따라 반환 값을 결정할 수 있다.