SQL 튜닝의 시작 (2013년)
MERGE구문의 구성요소 알기 0 0 59,232

by 구루비스터디 MERGE [2018.07.14]


1. MERGE 구문의 사용목적


* oracle에서 UPDATE&INSERT&DELETE의 MULTIPLE OPERATION을 지원하기 위한 DML 구문.
* 소스테이블에서 추출한 데이터를 타겟 테이블에 트랜잭션을 처리하는 형태로 동작함


2. MERGE 구문의 구성요소

구성요소내용
INTO 절MERGE INTO merge_t1 tt
USING 절USING (
SELECT c1, c2, c3
FROM MERGE_T2
WHERE c1 >= 99990
AND c1 <= 100090
) st
ON 절ON (tt.c1 = st.c1)
WHEN MATCHED THEN
UPDATE SET tt.c2 = st.c2, ttC3 = st.c3
DELETE WHERE (tt.c2 = 'A' )
WHEN NOT MATCHED THEN
INSERT (tt.C1, tt.c2, tt.c3) VALUES (st.c1, st.c2, st.c3)
WHERE (st.c2 = 'A');


1) INTO 절
  • Target Table 정의 : UPDATE, INSERT, DELETE 수행할 대상 테이블 1개만 기술
  • 힌트구문 적용 : PARALLEL 힌트, Source/Target 조인순서 결정 힌트 등 MERGE 와 INTO 사이에 힌트 적용
  • 주의 PARALLEL DML을 수행하기 위해서는 `ALTER SESSION ENABLE PARALLEL DML; 설정해야만 지원가능


2) USING 절
  • Source Table을 지정하고 Target Table에 UPDATE, INSERT를 수행할 대상 데이터를 추출(힌트 적용 가능)
  • 주의 : 추출 데이터 컬럼 중 Target Table과 조인할 컬럼의 값은 반드시 Unique 해야 함


3) ON 절
  • Target Table 의 데이터 중 Source Table에서 추출된 데이터와 일치하는 데이터를 체크 후,
    • 일치하면(WHEN MATCHED THEN) UPDATE 와 DELETE를 수행하고,
    • 일치하지 않으면(WHEN NOT MATCHED THEN) INSERT를 수행하도록 설정.


ON (Target Table.Column = Source Table.Column)  -> 조인조건
WHEN MATCHED THEN                                -> UPDATE or UPDATE&DELETE
WHEN NOT MATCHED THEN                            -> INSERT


"데이터베이스 스터디모임" 에서 2013년에 "SQL튜닝의시작 " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3791

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입