본문 바로가기
공부방/DataBase

[Oracle] MERGE기능

by SmartCow 2023. 11. 19.

1. MERGE란?

Oracle 데이터베이스에서 사용되는 SQL 문의 한 종류이며, 두 테이블 간의 조합, 삽입, 업데이트, 삭제 등을 단일 문으로 처리할 수 있도록 해준다.
이는 보통 "병합" 또는 "업서트(UPSERT)"라고도 불리며 MERGE 문은 대상 테이블(또는 뷰)과 소스 테이블 간의 조인 조건을 기반으로 대상 테이블을 조작한다.

기본적인 MERGE 문의 구조

MERGE INTO target_table USING source_table
ON (condition)
WHEN MATCHED THEN
    UPDATE SET column1 = value1, column2 = value2, ...
WHEN NOT MATCHED THEN
    INSERT (column1, column2, ...)
    VALUES (value1, value2, ...);
1) target_table : 대상이 되는 테이블 or 뷰
2) source_table : 대상 테이블에 삽입하거나 업데이트할 데이터를 포함하는 테이블 or 뷰
3) condition : 대상 테이블과 소스 테이블 간의 조인 조건
4) WHEN MATCHED : 조인 조건이 일치하는 경우 수행되는 부분으로, 업데이트 작업이 여기서 수행
5) WHEN NOT MATCHED : 조인 조건이 일치하지 않는 경우 수행되는 부분으로, 여기에서는 삽입 작업이 수행

 

예제)

departments_temp 의 데이터를 employees에 조인 조건인 department_id에 따라 업데이트하거나 삽입
MERGE INTO employees e
USING departments_temp d
ON (e.department_id = d.department_id)
      WHEN MATCHED THEN
                UPDATE SET e.department_name = d.department_name
      WHEN NOT MATCHED THEN
               INSERT (employee_id, department_id, department_name)
               VALUES (d.employee_id, d.department_id, d.department_name);