특정 열 값이나 데이터 값에 따라 어떤 데이터를 반환할 지 정할 때는 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! 오라클로 배우는 데이터베이스 입문(저자:이지훈 출판사:이지스퍼블리싱)
'DB > Oracle' 카테고리의 다른 글
[다중행 함수] 결과 값을 원하는 열로 묶어 출력하는 GROUP BY절 (0) | 2022.02.11 |
---|---|
[다중행 함수] 하나의 열에 출력 결과를 담는 다중행 함수 (0) | 2022.02.10 |
[오라클 함수] NULL 처리 함수 (0) | 2022.02.10 |
[오라클 함수] 형 변환 함수 (0) | 2022.02.09 |
[오라클 함수] 날짜 함수 (0) | 2022.02.09 |