-- 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;

'응용 SoftWare > Oracle' 카테고리의 다른 글

[내장 함수] NULLIF  (0) 2017.01.11
[내장 함수] CASE  (0) 2017.01.11
UNIQUE  (0) 2017.01.11
SEQUENCE  (0) 2017.01.04
GROUP BY절과 HAVING절  (0) 2017.01.03
Posted by Hyun CHO
,