본문 바로가기
Database/SQL

MERGE

by oncerun 2021. 2. 22.
반응형

Merge란 여러 테이블의 데이터를 합치는 병합을 의미합니다.

 

보통 Update와 Insert를 한 번에 할 때도 사용하기도 합니다.

 

한 테이블에 해당하는 데이터가 있으면 update를 하고 아니면 insert를 하는 식으로 사용됩니다.

만약 merge를 사용하지 않으면 select를 해서 해당 데이터의 존재 유무를 체크를 한 다음에

if update else insert로 분기 처리를 해야 합니다.

 

 

문법

MERGE INTO Table 1

USING Table 2

ON (병합 조건절)

WHEN MATCHED THEN

UPDATE SET 업데이트 내용

DELETE WHERE 조건

WHEN NOT MATCHED THEN

INSERT VALUES(칼럼 이름);

 

위 문법은 TABLE1과 TABLE2의 내용을 합쳐서 TABLE1에 모으는 것입니다.

기준은 3행이 되며 3행의 조건을 만족한다면 기존 TABLE1에 있던 해당 내용은 TABLE2의 내용으로 UPDATE 또는 DELETE가 수행되며, 만족하지 않는다면 TABLE2의 내용이 TABLE1에 신규 INSERT 됩니다.

 

다만 MERGE구문이 수행될 때 집계 테이블의 데이터와 신규테이블의 내용을 비교해서 확인하기 때문에 집계테이블 (TABLE1)의 데이터가 많아질수록 MERGE 작업의 수행 속도는 늦어진다는 특성이 있습니다.

따라서 3행의 조건절에 인덱스를 잘 구성해야 합니다.

 

*여기서 병합 조건절  = on절에서 주의해야 할 점이 존재합니다.

 

만약 Table 1의 조건 칼럼이 중복되는 값이 있다면, 무슨 행으로 비교를 해야 할지 몰라서 에러를 발생시키게 됩니다.

그래서 보통 집계 테이블의 조건 칼럼에는 PK나 UNIQUE index를 많이 설정합니다.

 

반응형

'Database > SQL' 카테고리의 다른 글

SQL 코딩테스트 연습  (0) 2022.10.17
[유선생] SQL 개발자 (3)  (0) 2022.02.12
[유선생] SQL 개발자 (2)  (0) 2022.02.04
SQL 개발자  (2) 2022.01.23
Join 연산을 이용한 select문  (0) 2021.02.27

댓글