SQL/Oracle

[Oracle] MERGE INTO 구문

jane.dev 2021. 7. 25. 13:43
반응형
MERGE INTO
충돌 없이 데이터를 업데이트 하는 것으로,
해당 데이터가 있으면 무시, 없으면 업데이트를 진행

 

MySQL의

INSERT INTO ~ ON DUPLICATE KEY UPDATE ~ 의 기능과 유사

 

예제)

먼저 예제용 테이블을 생성하고 오라클 HR 계정의 샘플 데이터 employees 테이블을 복사해서 삽입

mergeIntoTest 테이블 생성

CREATE TABLE mergeIntoTest(
    num NUMBER,
    f_name VARCHAR2(20),
    l_name VARCHAR2(20),
    dep_id VARCHAR2(20),
    salary NUMBER
);

 

위에서 15개 Row 데이터를 복사 - 삽입

INSERT INTO mergeIntoTest 
	(SELECT employee_id, first_name, last_name, job_id, salary 
     	FROM employees WHERE employee_id <= 115);

 

David Austin의 salary 를 6000으로 변경

MERGE INTO mergeIntoTest mit USING DUAL
ON (mit.f_name = 'David' AND mit.l_name = 'Austin')		# 조건식
WHEN MATCHED THEN						# 위 조건과 값이 매치 되는 경우,
salary = 6000							# 업데이트
WHERE mit.f_name = 'David' AND mit.l_name = 'Austin'
WHEN NOT MATCHED THEN						# 위 조건과 값이 매치되지 않는 경우,
INSERT (mit.num, mit.f_name, mit.l_name, mit.dep_id, mit.salary)
VALUES (116, 'David', 'Austin', 'IT_PROG', 6000);		# 추가

ON 뒤 조건식이 일치하는지 여부에 따라 데이트 업데이트 혹은 추가를 진행

 

기존 데이터 업데이트