Unconditional INSERT ALL
Unconditional INSERT ALL은 하나의 INSERT문으로 여러 개의 테이블에 데이터를 입력할 수 있다.
INTO 절과 VALUES 절에 기술한 컬럼의 개수와 데이터 타입은 동일해야 한다.
1 2 3 4 5 6 | -- Unconditional INSERT ALL Syntax INSERT ALL [ INTO 테이블1 VALUES (컬럼1,컬럼2,...)] [ INTO 테이블2 VALUES (컬럼1,컬럼2,...)] ....... Subquery; |
직접 실습을 하면서 이해해보자. 아래 예제는 emp 테이블의 데이터를 emp_ename테이블과 emp_deptno 테이블에 INSERT ALL을 사용하여 동시에 INSERT 하는 예제이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | -- scott 계정에서 emp 테이블을 이용하여 실습하였다. SQLPLUS scott/tiger -- 테스트용 테이블 emp_ename과 emp_deptno를 생성하자 -- empno, ename, sal 컬럼을 가지는 emp_ename 테이블 생성 CREATE TABLE emp_ename AS SELECT empno, ename, sal FROM emp WHERE 1=2; -- empno, deptno, job 컬럼을 가지는 emp_deptno 테이블 생성 CREATE TABLE emp_deptno AS SELECT empno, deptno, job FROM emp WHERE 1=2; -- 테이블이 정상적으로 생성되었는지 확인해 보자 SELECT * FROM emp_ename; SELECT * FROM emp_deptno; --INSERT ALL을 이용하여 emp_ename, emp_deptno 테이블에 INSERT를 해보자 INSERT ALL INTO emp_ename VALUES (empno, ename, sal) INTO emp_deptno (empno, deptno, job) VALUES (empno, deptno, job) SELECT empno, ename, sal, deptno, job FROM emp WHERE sal >= 2900; -- 데이터가 정상적으로 삽입되었는지 확인해 보자 -- sal >= 2900 조건을 만족하는 4건이 emp_ename, emp_deptno 테이블에 -- INSERT 된것을 확인 할 수 있다. SELECT * FROM emp_ename; SELECT * FROM emp_deptno; -- 테스트 테이블은 삭제 한다. DROP TABLE emp_ename; DROP TABLE emp_deptno; |
Conditional INSERT ALL
Conditional INSERT ALL을 사용하면 특정 조건에 맞는 행만 원하는 테이블에 입력할 수 있다.
서브쿼리로의 결과 행을 WHEN ... THEN절에서 체크한 후 조건에 맞는 절에 기술된 테이블에 INSERT 작업을 수행한다.
1 2 3 4 5 6 7 8 9 10 11 | -- Conditional INSERT ALL Syntax INSERT ALL WHEN 조건절1 THEN INTO [테이블1] VALUES (컬럼1,컬럼2,...) WHEN 조건절2 THEN INTO [테이블2] VALUES (컬럼1,컬럼2,...) ........ ELSE INTO [테이블3] VALUES (컬럼1,컬럼2,...) Subquery; |
직접 실습을 하면서 이해해보자. 아래는 부서별로 연봉인상율을 다르게 하여 각각의 테이블에 입력하는 예제이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | -- 테스트용 테이블 emp_dept10, emp_dept20, emp_dept30을 생성한다. CREATE TABLE emp_dept10 AS SELECT empno, ename, job, sal FROM emp WHERE 1=2; CREATE TABLE emp_dept20 AS SELECT empno, ename, job, sal FROM emp WHERE 1=2; CREATE TABLE emp_dept30 AS SELECT empno, 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 테이블에 INSERT INSERT ALL WHEN deptno=10 THEN INTO emp_dept10 VALUES (empno, ename, job, ROUND(sal*1.1)) WHEN deptno=20 THEN INTO emp_dept20 VALUES (empno, ename, job, ROUND(sal*1.2)) WHEN deptno=30 THEN INTO emp_dept30 VALUES (empno, ename, job, ROUND(sal*1.3)) SELECT deptno, empno, 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; |
태그
문서에 대하여
- - 강좌 URL : http://www.gurubee.net/lecture/2688
- - 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- - 구루비의 모든 강좌는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
'Oracle' 카테고리의 다른 글
ORACLE SYSTEM TABLE (0) | 2014.12.09 |
---|---|
CUBRID vs MySQL vs ORACLE SQL 타입별 비교 (0) | 2014.12.08 |
계층구조 쿼리의 활용2 (0) | 2014.12.03 |
계층구조 쿼리의 활용 (0) | 2014.12.03 |
오라클 계층구조 쿼리 (0) | 2014.12.03 |