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 |