Conditional INSERT ALL
Conditional INSERT ALL을 사용하면 특정 조건에 맞는 행만 원하는 테이블에 입력할 수 있다.
서브쿼리로의 결과 행을 WHEN ... THEN절에서 체크한 후 조건에 맞는 절에 기술된 테이블에 INSERT 작업을 수행한다.
-- Conditional INSERT ALL SyntaxINSERT ALLWHEN 조건절1 THEN INTO [테이블1] VALUES (컬럼1,컬럼2,...)WHEN 조건절2 THEN INTO [테이블2] VALUES (컬럼1,컬럼2,...)........ELSE INTO [테이블3] VALUES (컬럼1,컬럼2,...)Subquery;직접 실습을 하면서 이해해보자. 아래는 부서별로 연봉인상율을 다르게 하여 각각의 테이블에 입력하는 예제이다.
-- 테스트용 테이블 emp_dept10, emp_dept20, emp_dept30을 생성한다.CREATE TABLE emp_dept10 AS SELECT empno, deptno, ename, job, sal FROM emp WHERE 1=2;CREATE TABLE emp_dept20 AS SELECT empno, deptno, ename, job, sal FROM emp WHERE 1=2;CREATE TABLE emp_dept30 AS SELECT empno, deptno, ename, job, sal FROM emp WHERE 1=2;-- 테이블이 정상적으로 생성되었는지 확인해 보자SELECT * FROM emp_dept10;SELECT * FROM emp_dept20;SELECT * FROM emp_dept30;-- 부서별로 연봉인상율을 다르게 하여 각각의 테이블에 입력하는 예제이다.-- deptno=10 부서는 10%인상하여 emp_dept10 테이블에 INSERT-- deptno=20 부서는 20%인상하여 emp_dept20 테이블에 INSERT-- deptno=30 부서는 30%인상하여 emp_dept30 테이블에 INSERTINSERT ALL WHEN deptno=10 THEN INTO emp_dept10 VALUES(empno, deptno, ename, job, ROUND(sal*1.1)) WHEN deptno=20 THEN INTO emp_dept20 VALUES(empno, deptno, ename, job, ROUND(sal*1.2)) WHEN deptno=30 THEN INTO emp_dept30 VALUES(empno, deptno, ename, job, ROUND(sal*1.3))SELECT empno, deptno, ename, job, sal FROM emp;-- emp_dept10 테이블에 데이터가 정상적으로 등록 되었는지 확인해 보자-- emp_dept20, emp_dept30 테이블도 테이블명만 변경하여 확인해 보세요SELECT d.sal "인상급여", e.sal "원급여" FROM emp_dept10 d, emp e WHERE d.empno = e.empno; -- 테스트 테이블은 삭제 한다.DROP TABLE emp_dept10;DROP TABLE emp_dept20;DROP TABLE emp_dept30;'Database > Oracle SQL2' 카테고리의 다른 글
| 4.1. Unconditional INSERT ALL (0) | 2019.04.25 |
|---|---|
| 3.3. 계층구조 쿼리의 응용 (0) | 2019.04.24 |
| 3.2. 계층구조 쿼리의 활용 (0) | 2019.04.24 |
| 3.1. 계층구조 쿼리(Hierarchical Queries)란? (0) | 2019.04.24 |
| 2.5. GROUPING SETS (0) | 2019.04.24 |
| 2.4. Cube (0) | 2019.04.24 |
| 2.3. Rollup 결과 행 구분 (0) | 2019.04.24 |
| 2.2. Rollup 예제 (0) | 2019.04.24 |