중복데이터 삭제
관계 데이터 모델을 통해 DataBase를 설계 했다면 중복되는 데이터가 거의 없을 것이다.
키가 없는 Table등은 의미가 없기 때문에 대부분의 Table은 주키(Primary Key)를 가지고 있다. 그러나 과거에 구축되어 운영되어진 파일 기반의 데이터베이스를 사용하다가 관계형 데이터베이스인 오라클 등으로 데이터를 이전하는 경우, 같은 키를 가지는 데이터가 중복되는 난해한 현상이 발생하곤 한다. 이 경우에는 중복되는 데이터 중 한 개만 제외하고 나머지는 삭제 해야 할 것이다. 아래의 실습예제를 따라 해보자.
--> 만약 addrbook Table이 이미 존재 한다면 drop table addrbook 으로 삭제 후 실습을 진행하시오.
SQL> create table addrbook (
2 jumin varchar2(14) not null,
3 name varchar2(20),
4 addr varchar2(50),
5 tel varchar2(20));
테이블이 생성되었습니다.
SQL> insert into addrbook values ('111111-2222222','홍길동', '서울 강남구 역삼동', '02-333-4567');
SQL> insert into addrbook values ('333333-4444444','가길동', '서울 강남구 대치동', '02-567-7654');
SQL> insert into addrbook values ('111111-2222222','홍길동', '서울 강남구 역삼동', '02-333-4567');
SQL> commit;
SQL> select jumin, name from addrbook;
JUMIN NAME
-------------- --------------------
111111-2222222 홍길동
333333-4444444 가길동
111111-2222222 홍길동
--> 주민등록번호가 “111111-2222222” 인 홍길동의 자료가 2건 입력 되어 있다. 이중 하나를 삭제 하도록 해보자.
-->---------------------------------------------방법1
SQL> delete from addrbook a
2 where rowid > (select min(rowid) from addrbook b
3 where a.jumin = b.jumin);
1 행이 삭제되었습니다.
--> 아래의 rollback은 방금 수행한 delete문을 취소 한다는 의미이다.
SQL> rollback;
롤백이 완료되었습니다.
-->---------------------------------------------방법2
SQL> delete from addrbook a
2 where rowid < (select max(rowid) from addrbook b
3 where a.jumin = b.jumin)
4 ;
1 행이 삭제되었습니다.
관계 데이터 모델을 통해 DataBase를 설계 했다면 중복되는 데이터가 거의 없을 것이다.
키가 없는 Table등은 의미가 없기 때문에 대부분의 Table은 주키(Primary Key)를 가지고 있다. 그러나 과거에 구축되어 운영되어진 파일 기반의 데이터베이스를 사용하다가 관계형 데이터베이스인 오라클 등으로 데이터를 이전하는 경우, 같은 키를 가지는 데이터가 중복되는 난해한 현상이 발생하곤 한다. 이 경우에는 중복되는 데이터 중 한 개만 제외하고 나머지는 삭제 해야 할 것이다. 아래의 실습예제를 따라 해보자.
--> 만약 addrbook Table이 이미 존재 한다면 drop table addrbook 으로 삭제 후 실습을 진행하시오.
SQL> create table addrbook (
2 jumin varchar2(14) not null,
3 name varchar2(20),
4 addr varchar2(50),
5 tel varchar2(20));
테이블이 생성되었습니다.
SQL> insert into addrbook values ('111111-2222222','홍길동', '서울 강남구 역삼동', '02-333-4567');
SQL> insert into addrbook values ('333333-4444444','가길동', '서울 강남구 대치동', '02-567-7654');
SQL> insert into addrbook values ('111111-2222222','홍길동', '서울 강남구 역삼동', '02-333-4567');
SQL> commit;
SQL> select jumin, name from addrbook;
JUMIN NAME
-------------- --------------------
111111-2222222 홍길동
333333-4444444 가길동
111111-2222222 홍길동
--> 주민등록번호가 “111111-2222222” 인 홍길동의 자료가 2건 입력 되어 있다. 이중 하나를 삭제 하도록 해보자.
-->---------------------------------------------방법1
SQL> delete from addrbook a
2 where rowid > (select min(rowid) from addrbook b
3 where a.jumin = b.jumin);
1 행이 삭제되었습니다.
--> 아래의 rollback은 방금 수행한 delete문을 취소 한다는 의미이다.
SQL> rollback;
롤백이 완료되었습니다.
-->---------------------------------------------방법2
SQL> delete from addrbook a
2 where rowid < (select max(rowid) from addrbook b
3 where a.jumin = b.jumin)
4 ;
1 행이 삭제되었습니다.
| 12-27 | 1983 | |||
| 12-11 | 1453 | |||
| 53 | 03-15 | 1207 | ||
| 52 | 01-31 | 1372 | ||
| 51 | 01-31 | 1199 | ||
| 50 | 01-31 | 1063 | ||
| 49 | 01-19 | 1371 | ||
| 48 | 01-11 | 1204 | ||
| 47 | 01-03 | 1706 | ||
| 46 | 12-27 | 1983 | ||
| 45 | 12-19 | 1474 | ||
| 44 | 12-14 | 1436 | ||
| 43 | 12-11 | 1453 | ||
| 42 | 12-09 | 1168 | ||
| 41 | 12-01 | 1375 | ||
| 40 | 12-01 | 1532 | ||
| 39 | 12-01 | 1031 | ||
댓글 없음:
댓글 쓰기