[오라클(oracle)] sql merge 기능 설명 및 예제
안녕하세요.
오늘은 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되어 데이터가 들어갔습니다.
모두들 화이팅하세요.
'개발 > DB' 카테고리의 다른 글
drop, delete, truncate 차이점 및 개념 이해하기 (4) | 2019.11.06 |
---|---|
파티션 종류 및 개념 알아보기(Hash Partition, List partition, composite partition) (0) | 2019.11.05 |
[오라클(oracle)] range 파티션(partition) 알아보기 (0) | 2019.10.28 |
[오라클(oracle)] 파티션 테이블을 개념(테이블 파티셔닝) (0) | 2019.10.21 |
[오라클] Join 원리, 개념 파악하기(loop join, sort_merge join, hash join) (4) | 2019.10.19 |
후보키, 기본키 등 관계형 데이터 모델 설명(ER 다이어그램 기호 설명) (0) | 2019.09.02 |
윈도우 64비트 SQLite3 설치 및 실행(콘솔 및 그래픽 활용 가능) (6) | 2019.03.05 |