본문 바로가기

개발 문법/SQL

[Oracle] MERGE 문법과 예제 - INSERT/UPDATE 통합하기

반응형
1. MERGE 란?

2. MERGE 기본 문법
    2-1. 문법 구조
    2-2. 주요 키워드 설명

3. MERGE 예제
    3-1. 기본 예제 (EMP / TEMP_EMP 테이블)
    3-2. 응용 예제 (고객 / 주문 데이터 반영)

4. 활용 포인트
    4-1. 데이터 적재 자동화
    4-2. 중복 관리
    4-3. 성능 최적화
    4-4. 유지보수 용이성

5. 정리

 

1. MERGE란?

MERHG 구문은 INSERT와 UPDATE를 동시에 처리할 수 있는 SQL 문법입니다.

조건에 맞는 데이터는 UPDATE, 조건에 맞지 않는 데이터는 INSERT를 수행하여 한 번의 실행으로 두 가지 작업을 처리할 수 있습니다.

 

또한, MERGE문을 사용하면 INSERT  과정에서 발생할 수 있는 중복 문제를 예방할 수 있기에 실무에서도 활용도가 매우 높습니다.

 

2. MERGE 기본 문법

    2-1. 문법 구조

 

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

 

    2-2. 주요 키워드 설명

  • MERGR INTO : 데이터를 반영할 대상 테이블
  • USING : 비교할 기준 테이블 또는 서브쿼리
  • ON : 두 테이블 간 비교 조건
  • WHEN MATCHED THEN : 조건이 일치할 때 실행할 UPDATE 구문
  • WHEN NOT MATCHED THEN : 조건이 일치하지 않을 때 실행할 UPDATE 구문

3. MERGE 예제

    3-1. 기본 예제 (EMP / TEMP_EMP 테이블)

아래 예제는 EMP 테이블에 TEMP_EMP 데이터를 반영하는 구문입니다.

 

MERGE INTO EMP E
USING TEMP_EMP T
ON (E.EMP_ID = T.EMP_ID)
WHEN MATCHED THEN
    UPDATE SET 
        E.EMP_NAME = T.EMP_NAME,
        E.SALARY   = T.SALARY
WHEN NOT MATCHED THEN
    INSERT (EMP_ID, EMP_NAME, SALARY)
    VALUES (T.EMP_ID, T.EMP_NAME, T.SALARY);
  • EMT_ID 가 존재하면 EMP_NAME과 SALARY를 갱신합니다.
  • EMP_ID가 존재하지 않으면 신규 데이터를 삽입합니다.

    3-2. 응용 예제 (고객 / 주문 데이터 반영)

MERGE INTO CUSTOMER C
USING NEW_ORDER O
ON (C.CUST_ID = O.CUST_ID)
WHEN MATCHED THEN
    UPDATE SET 
        C.LAST_ORDER_DATE = O.ORDER_DATE,
        C.TOTAL_AMOUNT    = C.TOTAL_AMOUNT + O.ORDER_AMOUNT
WHEN NOT MATCHED THEN
    INSERT (CUST_ID, NAME, LAST_ORDER_DATE, TOTAL_AMOUNT)
    VALUES (O.CUST_ID, O.CUST_NAME, O.ORDER_DATE, O.ORDER_AMOUNT);
  • 기존 고객이라면 마지막 주문일자(ORDER_DATE)와 누적 금액(OERDER_AMOUNT)를 업데이트합니다.
  • 신규 고객이라면 새로운 고객 정보를 삽입합니다.

4. 활용 포인트

MERGE문의 활용 포인트는 다음과 같습니다.

 

    4-1. 데이터 적재 자동화

INSERT와 UPDATE를 구분하지 않고 한 번에 처리할 수 있어, 배치 작업이나 ELT 로직 작성 등에 효율적입니다.

    4-2. 중복 관리

Primary Key와 Unique Key를 기준으로 조건을 설정하면 불필요한 중복 데이터를 방지할 수 있습니다.

    4-3. 성능 최적화

대량 데이터를 처리할 때 SQL 실행 횟수를 최소화하여 성능을 향상시킬 수 있습니다.

    4-4. 유지보수 용이성

한 문장으로 처리가 가능하기 때문에 가독성이 좋아지고, 배치 스크립트가 정기 작업 관리가 편리해집니다.

 

4. 정리

MERGE 문은 INSERT와 업데이트를 동시에 처리할 수 있는 SQL 구문으로, 데이터 관리에 매우 효율적입니다.

 

조건에 맞는 데이터는 UPDATE, 조건에 맞지 않는 데이터는 INSERT를 수행하여 데이터 삽입 시의 중복 방지에 유용합니다.

 

실무에서는 중복 관리, 대용량 배치 처리 작업, 코드 최적화 등 여러 방면으로 널리 사용되므로, 문법과 활용 방법을 숙지해두면 업무 효율을 크게 높일 수 있습니다.

 

반응형