[오라클(oracle)] sql merge 기능 설명 및 예제 :: 개발/일상_Mr.lee

[오라클(oracle)] sql merge 기능 설명 및 예제

Posted by Mr.mandu.
2019. 10. 22. 15:13 개발/DB

안녕하세요.

오늘은 sql 문법을 소개하고자 합니다.

바로 merge 문법 입니다.


제가 직접 실습한 위주의 포스팅을 하고자 하기때문에...

정의 및 문법은 간략하게 설명드리겠습니다.


설명

Merge 는 말 그대로 병합 입니다.

두개의 테이블을 하나로 합치는 것 입니다.

저는 처음에 

insert into A

select * from B

이런식으로 단순 합병이 가능하여 merge의 기능을 얕잡아 봤는데

중요한 것은 merge의 기능은 조건에 따라 update, delete가 가능 하다는 것입니다.


문법

 merge into Table1

 using Table2

 on (병합조건절)

 when matched then

 update set 업데이트 내용

 delete where 조건

 when not matched then 

 insert values(컬럼이름);

진한 글씨체로 가변적인 부분만 체크 하였습니다.


바로 실습으로 들어가보도록 하겠습니다.

pt_01 테이블의 데이터 입니다.


pt_02 테이블의 데이터 입니다.


이제 p_total 테이블에 

pt_01 테이블의 데이터와 pt_02의 데이터를 합쳐보겠습니다.



pt_01 데이터를 p_total 테이블에 데이터를 이관시키는 작업입니다.

쿼리를 보시면 판매번호가 같은 데이터가 있다면 update를 시키고 그렇지 않다면 insert 시키고 있습니다.

마찬가지의 방법으로 pt_02 테이블도 p_total 테이블로 이관하였습니다.



결과를 보면 pt_01, pt_02 테이블의 데이터가 모두 p_total 테이블로 옮겨진 것을 볼 수 있습니다.

바로 가져다 쓸 수 있게 실제 사용했던 쿼리 기재합니다.


실사용 쿼리

 merge into p_total total

 using pt_02 p02

 on (total.판매번호 = p02.판매번호)

 when matched then

 update set total.제품번호 = p02.제품번호

 when not matched then

 insert values(p02.판매번호 , p02.제품번호, p02.수량, p02.금액);


위의 예제들은 모두 insert 의 결과만 확인 할 수 있습니다.

아래 예시를 통해 update가 실행되며 병합되는 예시를 첨부하였습니다.



저는 테스트를 위해 판매번호 12010203 데이터를 변경하였습니다.

그리고 이전에 실행했던 똑같은 merge 쿼리를 실행하였습니다.

결과는 새로 데이터가 추가되는것이 아니라 update되어 데이터가 들어갔습니다.


모두들 화이팅하세요.