Day37 - 테이블 병합.MERGE

2021. 4. 7. 11:21Oracle 공부

이번에는 MERGE 에 대해서 알아 봅시다.

 

MERGE

merge 는 대상이 되는 테이블을 병합시키는데 사용이 됩니다.

즉. merge 의 대상이 되는 테이블을 A라고 하고, 병합시킬 테이블을 B하고 한다면 B테이블을 가지고 추가,수정,업데이트,삭제 등의 DML문을 사용하고, A라는 테이블에는 B테이블이 가지고 있는 데이터만 추가하는 그런 기능 입니다.

 

-------원형--------

MERGE INTO 타겟 엘리어스
USING (병합시킬 테이블의 데이터)
ON (두 테이블의 연결 조건)
WHEN MATCHED THEN (일치할 경우 수행할 작업)
WHEN NOT MATCHED THEN (일치하지 않을 경우 수행할 작업)

--------------------

 

먼저, 확인을 위해서 타겟이 될 테이블을 만들어 줍시다.

WHEN MATCHED THEN 에는 (수정 or 삭제) 할 코드를,

WHEN NOT MATCHED THEN 에는 (추가)를 써주면 됩니다.

위와 같이 사용을 해주면 되는데요,

좀 길죠...? 하나씩 봅시다.

MERGE INTO 에는 타겟이 되는 테이블과 엘리어스(별칭)이 오면 됩니다.

USING 에는 서브쿼리를 사용해서, 가져올 데이터들을 작성해주면 됩니다. ( *를 사용해 전부 가져와도 됩니다)

ON 에는 연결할 조건을 입력해주면 되는데, 보통 기본키를 사용합니다.

WHEN MATCHED THEN 에는 조건이 일치할 경우 실행할 코드를 적으면 되는데, UPDATE SET 을 사용해주면 됩니다.

타겟테이블.속성 = 병합할테이블.속성 으로 해주면 되며, 속성 하나만 써도 됩니다.

WHEN NOT MATCHED THEN 에는 조건이 일치하지 않을 경우 실행할 코드를 적으면 되는데, 데이터를 추가할 경우에는 INSERT VALUES 를, 삭제할 경우에는 DELETE 를 사용해주면 됩니다.

INSERT를 사용할 경우에, 특정 속성의 데이터만 바꿔줄 것이라면 INSERT 우측에 (속성)을 작성해 주어야 합니다.

 

모든 속성의 데이터를 바꿔줄 것이라면, INSERT 우측에 (속성)은 생략해도 됩니다.

※ 데이터를 추가할 경우. NOT NULL인 속성은 무조건 추가해주어야 합니다.

이렇게 MERGE에 대해서 알아 보았습니다.

 

MERGE는 당장 쓰거나 하진 않지만, 알아두면 언젠가 쓸일이 생긴다고 합니다.

 

고생하셨습니다.