메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Oracle (토론 | 기여)님의 2025년 5월 13일 (화) 08:21 판
  • MERGE는 특히 ETL 작업, 데이터 동기화, UPSERT 작업에서 많이 사용돼요.

1. MERGE란?

영문 정의

The MERGE statement allows you to conditionally insert or update data in a target table based on the results of a join with a source table.

한글 정의

MERGE는 하나의 SQL 문으로, 대상 테이블에 대해 조건에 따라 INSERT(삽입) 또는 **UPDATE(갱신)**를 할 수 있는 문법입니다. 흔히 “UPSERT” (update + insert)라고 부르기도 해요.

2. 언제 쓰나? • A 테이블에 B 테이블 데이터를 넣고 싶은데, • 이미 있는 데이터는 UPDATE • 없는 데이터는 INSERT 해야 할 때 • 데이터 동기화, 이력 테이블 관리, 배치 업데이트 등에서 자주 사용

3. 기본 문법

MERGE INTO 대상테이블 t
USING 원본테이블 s
ON (t.기준컬럼 = s.기준컬럼)
WHEN MATCHED THEN
    UPDATE SET t.컬럼1 = s.컬럼1, ...
WHEN NOT MATCHED THEN
    INSERT (컬럼1, 컬럼2, ...)
    VALUES (s.컬럼1, s.컬럼2, ...);


4. 예제

예제 테이블

대상 테이블: target_employees

emp_id name salary 1 Alice 3000 2 Bob 3200

원본 테이블: source_employees

emp_id name salary 2 Bob 3500 3 Carol 2800


MERGE 쿼리

MERGE INTO target_employees t
USING source_employees s
ON (t.emp_id = s.emp_id)
WHEN MATCHED THEN
    UPDATE SET t.salary = s.salary
WHEN NOT MATCHED THEN
    INSERT (emp_id, name, salary)
    VALUES (s.emp_id, s.name, s.salary);


실행 결과

emp_id name salary 1 Alice 3000 2 Bob 3500 3 Carol 2800


5. 조건 추가 (WHERE 사용)

WHEN MATCHED THEN
    UPDATE SET t.salary = s.salary
    WHERE s.salary > t.salary -- 조건 만족할 때만 갱신

WHEN NOT MATCHED THEN
    INSERT (emp_id, name, salary)
    VALUES (s.emp_id, s.name, s.salary)
    WHERE s.salary >= 2500; -- 조건 만족할 때만 삽입


6. 장점 요약

장점 설명 한 문장으로 처리 INSERT/UPDATE를 한 쿼리에서 처리 가능 조건부 UPSERT WHEN 절로 상황에 따라 처리 다르게 가능 성능 최적화 가능 JOIN 기반이라 효율적인 데이터 비교가 가능


7. 주의사항 • MERGE는 DELETE도 처리 가능하지만, 사용 시 주의 필요 • 트리거나 제약조건이 있는 테이블에서는 충돌 가능성 있음 • 대상 테이블과 원본 테이블은 충분히 식별 가능한 기준 컬럼으로 JOIN 해야 함