[DataBase] DECODE 함수와 CASE 문

 DECODE 함수와 CASE 문 



NVL 함수는 데이터가 NULL 일 경우에만 어떤 데이터를 반환할지 정하는 함수입니다 . 
특정 열 값이나 데이터 값에 따라 어떤 데이터를 반환할지 정할 때는 DECODE , CASE 문을 사용합니다 . 


DECODE 기본 형식 


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








DECODE 사용

만약 테이블에서 직책이 MANAGER인 사람은 급여의 10%를 인상한 급여, SALESMAN 인사람은 급여의 5%, ANALYST 인사람은 그대로, 나머지는 3%만큼 인상된 급여를 보고 싶을 때 다음과 같이 입력 합니다 . 


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 와 마찬가지로 특정 조건에 따라 반환할 데이터를 설정할 때 사용합니다 . 
기준 데이터를 반드시 명시하고 그값에 따라 반환데이터를 정하는 DECODE와 달리 CASE 문은 조건에 사용하는 데이터가 서로 달라도 상관없습니다 . 

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




CASE문 사용

전에 사용했던 DECODE 함수와 동일한 조건으로 데이터를 반환하였습니다 . 

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











































기존의 데이터 없이 조건식으로만 CASE문 사용

CASE 문은 DECODE 함수와 달리 비교할 기준 데이터를 지정하지 않아도 됩니다 . 

  • 열값에 따라 출력이 달라지는 CASE문 
SELECT EMPNO, ENAME, COMM,
    CASE
    WHEN COMM IS NULL THEN '해당사항 X'
    WHEN COMM = 0 THEN '수당 X'
    WHEN COMM > 0 THEN '수당 :' || COMM
  END AS COMM_TEXT
 FROM EMP ;