반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- char[] String 형변환
- ObjectInputStream
- 상관 서브 쿼리
- first-of-child
- include액션태그
- ID중복
- interrupt()
- Daemon()
- include 지시자
- 표현 언어
- interrupted()
- 상관서브쿼리
- 리눅스세팅
- InputDialog
- MemoryStream
- isinterrupted()
- include지시자
- first-child
- Linux세팅
- sleep()메소드
- StringWriter
- 리눅스셋팅
- 스레드그룸
- 동기화
- ThreadGroup()
- Linux셋팅
- StringReader
- 메모리스트림
- 아이디중복
- String char[] 형변환
Archives
- Today
- Total
다연이네
[days08] merge문 (통합, 병합) 본문
반응형
merge 문은 구조가 같은 두 개의 테이블을 비교하여 하나의 테이블로 합치기 위한 데이터 조작이다.
예를 들어, 하루에 수만건씩 발생하는 데이터를 하나의 테이블에 관리할 경우 대량의 데이터로 인해 질의문의 성능이 저하된다. 이런 경우 지점별로 별도의 테이블에서 관리하다가 년말에 종합 분석을 위해 하나의 테이블로 합칠 때 merge 문을 사용하면 편리하다.
merge하고자 하는 소스 테이블의 행을 읽어 타킷 테이블에 매치되는 행이 존재하면 새로운 값으로 UPDATE를 수행하고, 만일 매치되는 행이 없을 경우 새로운 행을 타킷 테이블에서 INSERT를 수행한다.
create table dept1
as
select *
from dept;
select * from dept1;
create table dept2
as
select *
from dept;
select * from dept2;
insert into dept2 values ( 50, 'KIM_GUN', 'COREA' ); -- dept2 새로운 레코드 추가
update dept2
set dname = 'LEE_GUN'
where deptno= 30;
select * from dept1;
select * from dept2;
commit;
위 두 테이블을 병합 작업
merge into dept1 d1
using dept2 d2
on ( d1.deptno = d2.deptno )
when matched then -- update
update set d1.dname = d2.dname, d1.loc = d2.loc
when not matched then -- insert
insert values ( d2.deptno, d2.dname, d2.loc )
;
select * from dept1 ;
create table emp(
id number primary key,
name varchar2(10) not null,
salary number,
bonus number default 100
);
insert into emp(id,name,salary) values(1001,'jijoe',150);
insert into emp(id,name,salary) values(1002,'cho',130);
insert into emp(id,name,salary) values(1003,'kim',140);
commit;
select * from emp;
create table bonus(
id number
, bonus number default 100
);
insert into bonus (id)
( select e.id from emp e );
commit;
select * from bonus;
merge into bonus D
using (select id,salary from emp) S
on ( D.id = S.id )
when matched then
update set D.bonus=D.bonus + S.salary*0.01
when not matched then
insert(D.id, D.bonus) values(S.id,S.salary*0.01);
select * from bonus;
--
delete from bonus
where id=1003;
commit;
반응형
'Oracle' 카테고리의 다른 글
[days09] 복합키 / JOIN (0) | 2020.11.10 |
---|---|
[days09] 제약조건 (0) | 2020.11.10 |
[days08] 한번에 여러 데이터 insert하기 / 다중 insert 문 (0) | 2020.11.09 |
[days08] any, some 연산자 (0) | 2020.11.09 |
[days08] DML - 테이블에 데이터 추가, 복사, 수정 등 + 제약조건 (0) | 2020.11.09 |
Comments