728x90
SQL 문장에서 조건에 해당하는 값을 추출하고자 할 때 사용
1. DECODE
조건에 따라 데이터를 다른 값이나 컬럼값으로 추출할 수 있다.
- 부서번호별 이름을 지정해서 출력
SELECT DEPTNO, DECODE(DEPTNO, 10, 'ACCOUNTING',
20, 'RESEARCH',
30, 'SALES', 'OPERATIONS') NAME
FROM DEPT;
- 10 부서의 급여 합계, 20 부서의 최대값, 30 부서의 최소값
SELECT DEPTNO, DECODE(DEPTNO, 10, SUM(SAL),
20, MAX(SAL),
30, MINL(SAL)) SAL
FROM EMP
GROUP BY DEPTNO;
- 부서별 급여 합계
SELECT DEPTNO, NVL(SUM(DECODE(DEPTNO, 10, SAL)),0) DEPTNO10, -- 부서번호 10에 해당하는 급여의 합, 다른 번호는 해당이 없으니 0으로 출력
NVL(SUM(DECODE(DEPTNO, 20, SAL)),0) DEPTNO20,
NVL(SUM(DECODE(DEPTNO, 20, SAL)),0) DEPTNO20,
NVL(SUM(DECODE(DEPTNO, 30, SAL)),0) DEPTNO30,
NVL(SUM(DECODE(DEPTNO, 40, SAL)),0) DEPTNO40
FROM EMP
GROUP BY DEPTNO;
- NVL : 값이 NULL인 경우 지정값 출력
- 부서별 급여 합계 : 행으로 출력
SELECT D.DEPTNO, NVL(SUM(E.SAL),0) SAL
FROM EMP E, DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO
GROUP BY D.DEPTNO;
- 부서별 급여 합계 : 열로 출력
SELECT MAX(NVL(SUM(DECODE(DEPTNO, 10, SAL)),0)) DEPTNO10,
MAX(NVL(SUM(DECODE(DEPTNO, 20, SAL)),0)) DEPTNO20,
MAX(NVL(SUM(DECODE(DEPTNO, 30, SAL)),0)) DEPTNO30,
MAX(NVL(SUM(DECODE(DEPTNO, 40, SAL)),0)) DEPTNO40
FROM EMP
GROUP BY DEPTNO;
2. CASE
조건 연산자를 모두 사용할 수 있어 추가로 함수 사용 없이 비교연산을 수행할 수 있다.
- 부서번호별 이름을 지정해서 출력
- 첫번째 예제를 DECODE -> CASE 변경
SELECT DEPTNO,
CASE DEPTNO
WHEN 10 THEN 'ACCOUNTING'
WHEN 20 THEN 'RESEARCH'
WHEN 30 THEN 'SALES'
ELSE 'OPERATIONS'
END AS DEPT_NAME
FROM DEPT;
- 급여별 다른 인상율 적용
SELECT ENAME,
CASE
WHEN SAL < 1000 THEN SAL+(SAL*0.8)
WHEN SAL BETWEEN 1000 AND 2000 THEN SAL+(SAL*0.5)
WHEN SAL BETWEEN 2001 AND 3000 THEN SAL+(SAL*0.3)
ELSE SAL+(SAL*0.1)
END SAL
FROM EMP;
- 직업별 다른 인상율 적용
SELECT ENAME, JOB,
CASE JOB
WHEN 'CLERK' THEN SAL+(SAL*0.3)
WHEN 'SALESMAN' THEN SAL+(SAL*0.5)
WHEN 'MANAGER' THEN SAL+(SAL+0.4)
ELSE SAL+(SAL*0.2)
END JOB
FROM EMP;
728x90
'Dev > Oracle' 카테고리의 다른 글
[Oracle] Oracle Lock Test (0) | 2022.06.10 |
---|---|
[Oracle] HWM (High Water Mark) (0) | 2022.06.09 |
[Oracle] PCTFREE, PCTUSED (0) | 2022.06.09 |
[Oracle] 사용자, 권한, 롤 (0) | 2022.06.08 |
[Oracle] 아카이브 모드, 리두로그 (0) | 2022.06.07 |
댓글