본문 바로가기
SQL/oracle

oracle SQL - MERGE

by jun.s.gi 2023. 5. 22.
728x90

1. DML을 여러 번 하지 않고 행을 조건에 따라 UPDATE, INSERT, DELETE 할 수 있습니다.

2. 사용하기 쉽고 하나의 SQL 문장으로 처리하기 때문에 훨씬 간단합니다!

 

1) old_emp 테이블

2) y_emp 테이블

 

 

MERGE INTO old_emp o
    USING y_emp e
    
    ON (o.emp_id = e.emp_id)
    WHEN MATCHED THEN
    UPDATE SET
    o.emp_name = e.emp_name,
    o.position = e.position,
    o.salary = e.salary,
    o.dept_id = e.dept_id
    DELETE WHERE (e.position IS NULL)
    
    WHEN NOT MATCHED THEN
    INSERT VALUES(e.emp_id, e.emp_name, e.position, e.salary, e.dept_id);

on 조건이 참이라면 (y_emp 테이블에 있는 사원이 old_emp 테이블에도 있다면) old_emp 테이블에 있는 행을 y_emp 테이블 행의 값으로 갱신하고 만약 y_emp 테이블에 position 값이 NULL이라면 MERGE 과정에서 그 행은 지웁니다.

old_emp 테이블에 없는 사원은 INSERT 합니다.

 

3) MEGER 후 old_emp 테이블

윤현민 사원의 position이 NULL값인 이유는 WHEN MATCHED 절에 만족하지 못했기 때문에 그냥 NULL값인 채로 삽입되었습니다.

728x90

'SQL > oracle' 카테고리의 다른 글

oracle SQL - TIMESTAMP, INTERVAL  (0) 2023.05.30
oracle SQL - 상호 관련 서브 쿼리  (0) 2023.05.23
oracle SQL - DELETE + 서브 쿼리  (0) 2023.05.22
oracle SQL - UPDATE + 서브쿼리  (0) 2023.05.22
oracle SQL - 다중 INSERT  (0) 2023.05.22