SooBlending

[Oracle] Merge 테이블 합치기 본문

Programming/DataBase

[Oracle] Merge 테이블 합치기

블랜더 2017. 11. 7. 14:21

<MERGE>

합병(병합): 구조가 같은 두 개의 테이블을 하나의 테이블로 합치는 기능.

- 기존에 존재하는 행이 있다면 새로운 값으로 갱신(update)되고

  존재하지 않는 행이 있다면 새로운 행으로 추가(insert)해라!!

         

 형식)

   MERGE INTO 기준테이블명  별명

      USING 참조테이블명 별명

      ON (매칭 조건식)

   WHEN MATCHED  -- 매칭되는 행이 있다면

     THEN 업데이트 문   

   WHEN NOT MATCHED  -- 매칭되는 행이 아니라면

     THEN 추가문;

     

create table emp11    -- 기준 테이블 (병합된 결과를 반영)

as select * from emp;     


create table emp12     -- 참조 테이블

as select * from emp

   where job='MANAGER';


update emp12 set job='사원';

insert into emp12 (empno, ename, job, mgr, hiredate, sal, comm, deptno)

          values (8000,'나길동','사원',7788, sysdate, 2000, null, 30);


SQL> select empno, ename, job, deptno from emp12;


     EMPNO ENAME                JOB                    DEPTNO

---------- -------------------- ------------------ ----------

      7566 JONES                사원                  20

      7698 BLAKE                사원                  30

      7782 CLARK                사원                  10

      8000 나길동                사원                  30


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

      

MERGE INTO emp11  e1 -- 기준테이블(병합결과 반영)

      USING emp12 e2 -- 참조테이블

      ON (e1.empno = e2.empno)

   WHEN MATCHED  -- 매칭되는 행이 있다면

     THEN -- 변경문

        update set --이미 e1 기준테이블이 정의 되어있으므로 테이블명을 생략

            e1.ename=e2.ename,

            e1.job=e2.job,

            e1.mgr=e2.mgr,

            e1.sal=e2.sal,

            e1.comm=e2.comm,

            e1.deptno=e2.deptno

   WHEN NOT MATCHED  -- 매칭되는 행이 아니라면

     THEN --추가문

         insert values (e2.empno, e2.ename, e2.job, e2.mgr,

                        e2.hiredate, e2.sal, e2.comm, e2.deptno);

                              

 ===> 4 rows merged.(4행 병합되었습니다!!)     


select empno, ename, job, deptno from emp11;


     EMPNO ENAME                JOB                    DEPTNO

---------- -------------------- ------------------ ----------

      7369 SMITH                CLERK                      20

      7499 ALLEN                SALESMAN                   30

      7521 WARD                 SALESMAN                   30

      7566 JONES                사원                       20

      7654 MARTIN               SALESMAN                   30

      7698 BLAKE                사원                       30

      7782 CLARK                사원                       10

      7788 SCOTT                ANALYST                    20

      7839 KING                 PRESIDENT                  10

      7844 TURNER               SALESMAN                   30

      7876 ADAMS                CLERK                      20

      7900 JAMES                CLERK                      30

      7902 FORD                 ANALYST                    20

      7934 MILLER               CLERK                      10

      8000 나길동                사원                       30


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

'Programming > DataBase' 카테고리의 다른 글

[Oracle] PL/SQL  (0) 2017.11.09
[Oracle] 시퀀스(Sequence)  (0) 2017.11.09
[Oracle] 뷰 (View) 단일뷰/복합뷰  (0) 2017.11.08
[Oracle] 제약조건 (Constraint)  (2) 2017.11.07
[Oracle] 트랜잭션(Transaction) COMMIT/ROLLBACK  (2) 2017.11.07
Comments