[내장 함수] MERGE
-- MERGE : 병합
select * from emp;
-- EMP 테이블 DEPTNO가 30인 사원을 포함하는 EMPTEST 테이블을 생성
create table emptest
as
select * from emp where deptno=30;
select * from emptest;
select * from emp;
delete from emp where empno=4444; -- emp 테이블에 불필요한 레코드 삭제
commit;
-- EMP 테이블을 EMPTEST 테이블로 병합
-- EMPTEST 테이블에 이미 있는 사원은 급여를 15% 인상하고,
-- EMPTEST 테이블에 없는 사원은 추가한다.
merge into emptest -- 타겟 테이블명
using emp
on (emptest.empno = emp.empno) -- 사원 번호를 비교 기준
when matched then -- 양쪽 사원번호가 이미 있는 경우(업데이트)
update set emptest.sal = emptest.sal*1.15
when not matched then -- 사원번호가 없는 경우(인설트)
insert values(emp.empno, emp.ename, emp.job, emp.mgr, emp.hiredate, emp.sal, emp.comm, emp.deptno);
select * from emptest;
-- EMP 테이블에서 담당업무가 SALESMAN이 아닌 사원을 포함한 EMP_EX 테이블을 생성한다.
create table emp_ex
as
select * from emp where job!='salesman';
select * from emp_ex;
-- EMP 테이블에서 담당업무가 SALESMAN인 사원을 포함한 EMP_SALESMAN 테이블을 생성한다.
create tavle emp_salesman
as
select * from emp where job='salesman';
select * from emp_salesman;
-- EMP_SALESMAN 테이블에 EMP_EX 테이블을 병합하되, 이미 있는 사원은 급여를 10% 인상하고, 보너스를 50% 인상하며, 없는 사원은 EMP_SALESMAN 테이블에 사원을 추가하라.
merge into emp_salesman s
using emp_ex e
on(s.empno = e.empno)
when matched then
update set s.sal=s.sal*1.1, e.comm=s.comm*1.5
when not matched then
insert values(e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno);
select * from emp_salesman;