본문 바로가기

데이터베이스

Merge

우선 테이블 Target, Source라고 명칭 붙어진 2개의 테이블이 있다고 가정한다. 

Target에 테이블에 데이터들을 Source 테이블 데이터들과 차이점을 비교하여 Target 테이블 내에 데이터들이 변경된다.

 

변경의 유형은 아래와 같이 3가지다.

1. Insert 

Source 테이블에는 있지만 Target 테이블에는 없는 행들은 Target 테이블에 Insert가 수행될 수 있다. 

2. Delete

Insert와 반대의 경우다. Target 테이블에는 있지만 Source 테이블에는 없는 행들은 Target 테이블에서 Delete가 수행될 수 있다. 

3.  Update 

Source 테이블과 Target 테이블의 키값이 같다. 하지만 키외의 컬럼에 값이 다르다면 Target 테이블에 이 행들에 대해 Source 테이블의 키외의 컬럼값들로 Update가 수행될 수 있다.

 

Merge Statement는 위의 3가지 변경 유형을 하나의 Statement로 처리할 수 있다. 

 

Merge Target_Table using Source_Table -- Merge 절 : Target과 Source테이블을 이 안에 둔다. 

    on merge_condition  -- join과 유사. Target과 Source 테이블 간에 Primary 혹은 unique 키를 사용하여 비교한다. 

when matched 

    then Update Statement 

when not matched 

    then insert Statement 

when not matched by Source 

    then delete;

 

Matched : Update 문이 들어간다. 

Not Matched :  Source에  튜플들이 Target 테이블로 삽입하는 Insert문이 들어간다.

Not Matched by Source :  Source 테이블에 없는 Target 테이블의 행들을 삭제하는 Delete문이 들어간다.