문서유형ㅣ기술정보
분야ㅣ관리/환경설정
문서번호ㅣTADTI085
개요
Tibero에서 Conditional INSERT ALL 구문을 사용하여 하나의 쿼리로 여러 테이블에 데이터를 동시에 삽입하는 예제를 안내합니다.
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;방법
아래는 부서 별로 연봉인상율을 다르게 하여 각각의 테이블에 입력하는 예제입니다.
1. 테스트용 테이블 생성
-- 테스트용 테이블 emp_dept10, emp_dept20, emp_dept30 을 생성합니다. DROP TABLE emp_dept10; DROP TABLE emp_dept20; DROP TABLE emp_dept30; CREATE TABLE emp_dept10 AS SELECT deptno, empno, ename, job, sal FROM emp WHERE 1=2; CREATE TABLE emp_dept20 AS SELECT deptno, empno, ename, job, sal FROM emp WHERE 1=2; CREATE TABLE emp_dept30 AS SELECT deptno, empno, ename, job, sal FROM emp WHERE 1=2;
2. 테이블 생성 확인
-- 테이블이 정상적으로 생성되었는지 확인해 봅니다. SELECT * FROM emp_dept10; SELECT * FROM emp_dept20; SELECT * FROM emp_dept30;
3. 부서별 연봉 인상 비율에 따라 INSERT
-- 부서별로 연봉 인상율을 다르게 하여 각각의 테이블에 INSERT 합니다.
-- 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 (deptno, empno, ename, job, ROUND(sal * 1.1))
WHEN deptno = 20 THEN
INTO emp_dept20
VALUES (deptno, empno, ename, job, ROUND(sal * 1.2))
WHEN deptno = 30 THEN
INTO emp_dept30
VALUES (deptno, empno, ename, job, ROUND(sal * 1.3))
SELECT deptno, empno, ename, job, sal
FROM emp;4. 결과 확인
-- 테이블에 데이터가 정상적으로 등록 되었는지 확인합니다.
SELECT d.deptno, d.sal "10%_UP_SALARY", e.sal "ORIGINAL_SALARY"
FROM emp_dept10 d, emp e
WHERE d.empno = e.empno;
-- 결과 예시
DEPTNO 10%_UP_SALARY ORIGINAL_SALARY
-------- -------------- ----------------
10 2695 2450
10 5500 5000
10 1430 1300
3 rows selected.
SELECT d.deptno, d.sal "20%_UP_SALARY", e.sal "ORIGINAL_SALARY"
FROM emp_dept20 d, emp e
WHERE d.empno = e.empno;
-- 결과 예시
DEPTNO 20%_UP_SALARY ORIGINAL_SALARY
-------- -------------- ----------------
20 960 800
20 3570 2975
20 3600 3000
20 1320 1100
20 3600 3000
5 rows selected.
SELECT d.deptno, d.sal "30%_UP_SALARY", e.sal "ORIGINAL_SALARY"
FROM emp_dept30 d, emp e
WHERE d.empno = e.empno;
-- 결과 예시
DEPTNO 30%_UP_SALARY ORIGINAL_SALARY
-------- -------------- ----------------
30 2080 1600
30 1625 1250
30 1625 1250
30 3705 2850
30 1950 1500
30 1235 950
6 rows selected.
SQL
아래는 조건에 사용하는 컬럼을 다르게 하여 각각의 테이블에 입력하는 예제입니다.
두 조건을 모두 만족하는 7900 JAMES 는 첫번째 조건을 만족하므로 emp_empno 테이블에 입력되었고, 두번째 조건 또한 만족하므로 emp_empno 테이블에도 입력이 됩니다.
1. 테스트용 테이블 생성
-- 테스트용 테이블 emp_empno, emp_sal 을 생성합니다. DROP TABLE emp_empno; DROP TABLE emp_sal; CREATE TABLE emp_empno AS SELECT empno, ename, job, sal, deptno FROM emp WHERE 1=2; CREATE TABLE emp_sal AS SELECT empno, ename, job, sal, deptno FROM emp WHERE 1=2;
2. 테이블 생성 확인
-- 테이블이 정상적으로 생성되었는지 확인해 봅니다. SELECT * FROM emp_empno; SELECT * FROM emp_sal;
3. 조건에 따른 INSERT ALL 수행
-- empno >= 7876 인 사원은 emp_empno 테이블에 INSERT
-- sal <= 1000 인 사원은 emp_sal 테이블에 INSERT
INSERT ALL
WHEN empno >= 7876 THEN
INTO emp_empno
VALUES (empno, ename, job, sal, deptno)
WHEN sal <= 1000 THEN
INTO emp_sal
VALUES (empno, ename, job, sal, deptno)
SELECT empno, ename, job, sal, deptno
FROM emp;4. 결과 확인
SELECT * FROM emp_empno; EMPNO ENAME JOB SAL DEPTNO ------- ------ --------- ---- ------- 7876 ADAMS CLERK 1100 20 7900 JAMES CLERK 950 30 7902 FORD ANALYST 3000 20 7934 MILLER CLERK 1300 10 4 rows selected. SELECT * FROM emp_sal; EMPNO ENAME JOB SAL DEPTNO ------- ------ ------- ---- ------- 7369 SMITH CLERK 800 20 7900 JAMES CLERK 950 30 2 rows selected.