라일락 꽃이 피는 날

[Oracle] 데이터 입력/수정/삭제 한 번에 하기 (Merge) 본문

프로그래밍/Oracle

[Oracle] 데이터 입력/수정/삭제 한 번에 하기 (Merge)

eunki 2022. 6. 3. 17:48
728x90

merge

insert, update, delete 명령어를 한 번에 수행하는 SQL 이다.

주로 대용량 데이터를 한 번에 update 하는 SQL의 성능을 개선하기 위해서 사용한다.

 

 

 

 

예제 1. 사원 테이블에 loc 컬럼 추가

alter table 테이블명
        add 컬러명 데이터타입(크기);
alter table emp
    add loc varchar2(10);

 

 

 

예제 2. 사원 테이블에 추가한 loc 컬럼의 데이터를 해당 사원의 부서 위치 값으로 갱신

merge into emp e            # emp 테이블을 merge 하는데
using dept d                # dept 테이블을 사용해라
on (e.deptno = d.deptno)    # 이때 두 테이블의 연결 고리는 deptno 이다
when matched then           # on 절에 나온대로 emp 테이블의 deptno 가 dept 테이블의 deptno 와 매칭 된다면
update set e.loc = d.loc;   # emp 테이블의 loc 를 dept 테이블의 loc 로 갱신해라

 

 

 

예제 3. emp_test 의 월급을 emp 테이블의 월급으로 갱신하고, emp 테이블에는 존재하는 사원인데 emp_test 에는 없는 사원은 새롭게 입력

create table emp_test
as
select *
    from emp
    where deptno in (10,30);

update emp_test
    set sal = 0;
    
commit;

select * from emp_test;
merge into emp_test t
using emp e
on (t.empno = e.empno)
when matched then
update set t.sal = e.sal
when not matched then
insert (t.empno, t.ename, t.sal, t.job, t.comm, t.hiredate, t.mgr, t.deptno)
    values (e.empno, e.ename, e.sal, e.job, e.comm, e.hiredate, e.mgr, e.deptno);
728x90