DATOR


INSERT구문 (단일 TABLE INSERT / 다중 TABLE INSERT) SQL가이드




 

 

INSERT구문에 대해 정리해보려고 합니다.

INSERT구문은 크게 다음과 같이 분류할 수 있지 않을까??? ( INSERT에 대한 정리를 하다가  임의로 분류하였습니다...)

 

===============================================================================================

     1. 단일 TABLE 단일 ROW INSERT

     2. 단일 TABLE 다중 ROW INSERT

     3. 멀티 TABLE INSERT

         1) Unconditional Multi-table Insert

         2) Conditional All Multi-table Insert

         3) Conditional First Multi-table Insert

=============================================================================================== 

 

1. 단일 TABLE 단일 ROW INSERT는 가장 많이 사용하는 SQL로 단일 TABLE에 한건씩 INSERT하고자 할 때 사용한다.

   예제) > INSERT INTO DEPT1(DEPTNO, DNAME, LOC) VALUES (10, '총무부','전주');

         > 1 개의 행이 만들어졌습니다.

 

2. 단일 TABLE에 다중 ROW를 INSERT하고자 할때 사용하는 SQL로 역시 많이 사용되는 쿼리 중 하나이다.

   예제)  INSERT INTO TEST3 
         SELECT
학번, 이름, 과목 FROM TEST1 , TEST2 WHERE A.학번 = B.학번;

         ==> Select된 여러 개의 rowTEST3 테이블에 insert

 

3. 다중 TABEL에 멀티ROW를 INSERT할 때 사용한다.

   이것은 다음과 같이 3가지로 분류될 수 있다.

   1) Unconditional Multi-table Insert : 서브쿼리에서 생성된 모든 결과값에 대응하여 INSERT 실행

      ==> /* Oracle 9i 이상에서 지원* /
      ==> 여러 개의 테이블에 멀티 레코드 인서트 : 다수의 INSERT문 모두 수행. SELECT된 로우를 여러 테이블로 INSERT.

          데이터타입을 잘 맞춰주어야 한다.

     문법) INSERT ALL
           
INTO tab1 VALUES(col1, col2, col3)

           INTO tab2 VALUES(col1, col4, col3)

           SELECT col1, col2, col3, col4 FROM tab    

     예제) INSERT ALL

           INTO SAL_HISTORY VALUES(EMPLOYEE_ID, HIRE_DATE, SALARY)

           INTO MGR_HISTORY VALUES(EMPLOYEE_ID, MANAGER_ID, SALARY)

           SELECT EMPLOYEE_ID, HIRE_DATE, SALARY, MANAGER_ID FROM EMPLOYEES;

 

   2) Conditional All Multi-table Insert WHEN에 나열된 조건과 부합되는 ROW들 모두를 여러 테이블에 한꺼번에 insert.

      ==> Conditional All Multi-table Insert 는 서브쿼리에서 생성된 결과값 중에 WHEN에 나열된 조건과 부합되는 ROW들을 여러 테이블에 한꺼번에 insert. 
     문법)  INSERT ALL WHEN ~~ THEN

     예제 ) INSERT ALL
            WHEN SAL > 10000 THEN
            INTO SAL_HISTORY VALUES(EMPID, HIREDATE, SAL)
            WHEN MGR > 100 THEN
            INTO MGR_HISTORY VALUES(EMPID, MGR, SAL)
            SELECT  EMPLOYEE_ID AS EMPID, HIRE_DATE AS HIREDATE    ,SALARY AS SAL, MANAGER_ID AS MGR 
            FROM EMPLOYEES;

  

   3) Conditional First Multi-table Insert WHEN절의 조건에 가장먼저 만족하는 조건에 대해서만 insert하고 나머지 WHEN절은 무시한다.

      ==> Conditional First Multi-table Insert는 각 row당 실행시 WHEN절의 조건에 가장먼저 만족하는 조건에 대해서만 insert하고 나머지 WHEN절은 무시한다.
      문법) INSERT FIRST WHEN ~~ THEN

      예제) INSERT FIRST
            WHEN SAL > 20000 THEN
            INTO SAL_HISTORY VALUES(EMPID, HIREDATE, SAL) 
            WHEN SAL < 5000 THEN
            INTO SAL_HISTORY VALUES(EMPID, HIREDATE, SAL) 
            ELSE 
            INTO SAL_HISTORY VALUES(EMPID, HIREDATE, 0)
            SELECT EMPLOYEE_ID EMPID, SALARY SAL, HIRE_DATE HIREDATE
            FROM EMPLOYEES; 

 

Tag :

Leave Comments