[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 ;