4.1. Unconditional INSERT ALL
Unconditional INSERT ALL
Unconditional INSERT ALL은 하나의 INSERT문으로 여러 개의 테이블에 데이터를 입력할 수 있다.
INTO 절과 VALUES 절에 기술한 컬럼의 개수와 데이터 타입은 동일해야 한다.
-- 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 하는 예제이다.
-- 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 작업을 수행한다.
-- 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;
직접 실습을 하면서 이해해보자. 아래는 부서별로 연봉인상율을 다르게 하여 각각의 테이블에 입력하는 예제이다.
-- 테스트용 테이블 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;
'Database > Oracle SQL2' 카테고리의 다른 글
4.2. Conditional 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 |