2017년 4월 8일 토요일

[구로IT학원,오라클교육,SQL,튜닝강좌] Merge 사용하기

- 문법 
MERGE INTO table_name alias 
          USING (table|view|subquery) alias 
          ON (join condition) 
          WHEN MATCHED THEN 
                      UPDATE SET col1 = val1[, col2 = val2…] 
          WHEN NOT MATCHED THEN 
                      INSERT (컬럼리스트) VALUES (값들....); 


MERGE는 UPDATE와 INSERT를 결합한 문장으로 각각의 쓰임새는 다음과 같다. 
INTO clause : data가 update 되거나 insert될 table 이름 
USING clause : 대상 table의 data와 비교한 후  update 또는 insert할 때 사용할 data의 source.  
ON clause : update나 insert를 하게 될 condition으로, 해당 condition을 만족하는 row가 있으면 WHEN MATCHED 이하를 실행하게 되고, 없으면 WHEN NOT MATCHED 이하를 실행하게 된다. 
WHEN MATCHED : ON clause의 조건이 TRUE인 row에 수행할 내용 
WHEN NOT MATCHED : ON clause의 조건에 맞는 row가 없을 때 수행할 내용 

--------------------------------------------- 예 
SQL> create table emp_history ( 
  2  empno number(4) not null primary key, 
  3  mydate date, 
  4  salary number(7,2)); 

테이블이 생성되었습니다. 

SQL> MERGE INTO emp_history eh 
  2        USING emp e 
  3        ON (e.empno = eh.empno) 
  4  WHEN MATCHED THEN 
  5        UPDATE SET eh.salary = e.sal 
  6  WHEN NOT MATCHED THEN 
  7        INSERT VALUES (e.empno, sysdate, sal); 

14 행이 병합되었습니다. 

SQL> commit; 

커밋이 완료되었습니다. 

SQL> select * from emp_history; 

    EMPNO MYDATE      SALARY 
---------- -------- ---------- 
      7844 04/01/06      1500 
      7839 04/01/06 
      7782 04/01/06      2450 
      7521 04/01/06      1250 
      7654 04/01/06      1250 
      7788 04/01/06      3000 
      7698 04/01/06      2850 
      7566 04/01/06      2975 
      7499 04/01/06      1600 
      7934 04/01/06      1300 
      7902 04/01/06      3000 
      7369 04/01/06        800 
      7876 04/01/06      1100 
      7900 04/01/06        950 

14 개의 행이 선택되었습니다. 

댓글 없음:

댓글 쓰기