프로그래밍/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