우와한 개발자

[SQL] Oracle DML 심화 정리 - MERGE 테이블 병합과 INSERT ALL / INSERT FIRST 다중 삽입

by 우와한개발자

1. MERGE : 테이블 병합

  • 두 테이블을 하나로 병합
  • 조건에 따라 UPDATE 또는 INSERT 수행
MERGE INTO 대상테이블 t
USING 소스테이블 s
ON (조건)
WHEN MATCHED THEN
    UPDATE SET 컬럼 = 값
WHEN NOT MATCHED THEN
    INSERT (컬럼들)
    VALUES (값들);
구분 의미 비고
대상테이블 (TARGET) 실제 변경되는 테이블 테이블 바뀜
소스테이블 (SOURCE) 비교 기준 데이터 테이블 안 바뀜
ON 조건 매칭 기준 JOIN 조건과 유사
WHEN MATCHED THEN
  UPDATE SET 컬럼 = 값
조건 만족 시 UPDATE
WHEN NOT MATCHED THEN
  INSERT (컬럼들)
  VALUES (값들);
조건 불만족 시 INSERT
MERGE INTO emp t
USING emp_temp s
ON (t.empno = s.empno)
WHEN MATCHED THEN
    UPDATE SET t.salary = s.salary
WHEN NOT MATCHED THEN
    INSERT (empno, ename, salary)
    VALUES (s.empno, s.ename, s.salary);

  

MERGE INTO emp t
USING (
    SELECT empno, ename, salary
    FROM emp_temp
) s
ON (t.empno = s.empno)
WHEN MATCHED THEN
    UPDATE SET t.salary = s.salary
WHEN NOT MATCHED THEN
    INSERT (empno, ename, salary)
    VALUES (s.empno, s.ename, s.salary);

 

1) JOIN과 MERGE 비교 

구분 JOIN MERGE
목적 조회 (읽기) 데이터 변경 (쓰기)
결과 결과셋 반환 테이블 직접 변경
위치 SELECT DML
매칭 시 데이터 결합 UPDATE
비매칭 시 NULL 또는 제외 INSERT
개념 읽기 동기화 (UPSERT)

 

2. Multiple INSERT : 테이블 분리

1) INSERT FIRST

  • 조건을 위에서부터 검사해서 처음 만족한 것만 INSERT
INSERT FIRST
    WHEN 조건1 THEN INTO 테이블1 VALUES (...)
    WHEN 조건2 THEN INTO 테이블2 VALUES (...)
    ELSE INTO 테이블3 VALUES (...)
SELECT 컬럼들
FROM 소스;

 

2) INSERT ALL

  • 조건을 검사해서 맞는 모든 INTO 실행 (여러 테이블에 INSERT 가능)
INSERT ALL
	[WHEN 조건1 THEN ]
    INTO 테이블1 VALUES (...)
  [WHEN 조건2 THEN ]
    INTO 테이블2 VALUES (...)
  [WHEN 조건3 THEN ]
    INTO 테이블3 VALUES (...)
SELECT 컬럼들
FROM 소스;
구분 INSERT FIRST INSERT ALL
조건 만족 하나만 실행 전부 실행
흐름 if-else if 여러 개
결과 한 테이블만 여러 테이블 가능

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기