SQL 튜닝의 시작 (2013년)
MERGE 구문은 다양한 형태의 DML을 지원한다 0 0 99,999+

by 구루비스터디 MERGE [2018.07.14]


MERGE 구문은 ON 절에 WHEN MATCHED THEN, WHEN NOT MATCHED THEN 절을 이용하여 총 3 가지 유형의 트랜잭션 처리를 할 수 있다.

CASE1)UPDATE & DELETE & INSERT 또는 UPDATE & INSERT (순서 상관 없음)

MERGE INTO MERGE_T1 tt
USING (
SELECT  c1, c2, c3
FROM MERGE_T2
WHERE c1 >= 99990
AND c1 <= 100090
) st
ON ( tt.c1 = st.c1 )
WHEN MATCHED THEN
UPDATE SET tt.c2 = st.c2, tt.c3 = 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') ;



MERGE INTO MERGE_T1 tt
USING (
SELECT  c1, c2, c3
FROM MERGE_T2
WHERE c1 >= 99990
AND c1 <= 100090
) st
ON ( tt.c1 = st.c1 )
WHEN NOT MATCHED THEN
INSERT (tt.c1, tt.c2, tt.c3) VALUES (st.c1, st.c2, st.c3)
WHERE (st.c2 = 'A') 
WHEN MATCHED THEN
UPDATE SET tt.c2 = st.c2, tt.c3 = st.c3
DELETE WHERE (tt.c2 = 'A');


CASE2)Only INSERT

MERGE INTO MERGE_T1 tt
USING (
SELECT  c1, c2, c3
FROM MERGE_T2
WHERE c1 >= 99990
AND c1 <= 100090
) st
ON ( tt.c1 = st.c1 )
WHEN NOT MATCHED THEN
INSERT (tt.c1, tt.c2, tt.c3) VALUES (st.c1, st.c2, st.c3)
WHERE (st.c2 = 'A') ;


CASE3)Only UPDATE or UPDATE & DELETE

MERGE INTO MERGE_T1 tt
USING (
SELECT  c1, c2, c3
FROM MERGE_T2
WHERE c1 >= 99990
AND c1 <= 100090
) st
ON ( tt.c1 = st.c1 )
WHEN MATCHED THEN
UPDATE SET tt.c2 = st.c2, tt.c3 = st.c3
DELETE WHERE (tt.c2 = 'A');

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

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

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

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

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