..
SQL (6)
중복 데이터 삭제 방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

중복 데이터 삭제 방법


방법1)

tab1 : 중복데이터가 있는 테이블


중복 데이터 제거 후 더미테이블 생성

create table dummy_tab1

as

select distinct col1, col2

from tab1;


rename tab1 to tab_back;

rename dummy_tab1 to tab1;


※ 고민해야할 부분

index, 테이블 권한, 참조테이블 등등... 유지할 수 있는 방법..



방법2)


delete from tab1 t

where rowid > (

select min(rowid) from tab1

where col1 = t.col1

and    col2 = t.col2

)


commit;

'DEV > DB' 카테고리의 다른 글

sybase 간단사용법  (0) 2013.11.20
Group By 에서 문자열 합치기 - 버전별 정리  (0) 2013.09.26
win7 에서 oracle 설치시 문제 발생  (0) 2013.06.21
  Comments,     Trackbacks
[sql] update join
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[출처] http://piyoro.tistory.com/search/update%20join
 
A table 과  b table 를 조인하여 A table의 특정필드에 b table의 특정 필드의 값을
Update 할경우

/*+ bypass_ujvc */ 힌트를 사용한다. 어려워 ㅠㅠ

update  /*+ bypass_ujvc */
  (
    SELECT
          a.colnm ra
         ,b.colnm rb  
      FROM a
         , b
     WHERE a.key= b.key
) set ra = rb; 

update문으로 조인할 경우가 있을 경우 매우 유용하다. 꼭 기억해야 하는 쿼리~!!


UPDATE book a1
SET ( name, date ) = ( SELECT name, date FROM a2 WHERE a1.bookid = a2.bookid )
WHERE a1.bookid IS NOT NULL

'DEV > DB' 카테고리의 다른 글

select 문  (0) 2009.03.24
[sql] to_number()함수  (0) 2009.03.24
트리거  (0) 2009.03.13
  Comments,     Trackbacks
[sql] to_number()함수
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

숫자지만 varchar 타입의 데이터를 비교할 경우

꼭 to_number()함수로 변환해 주자

10 < 3 (10보다 3을 큰수로 생각한다.)

'DEV > DB' 카테고리의 다른 글

[sql] update join  (0) 2009.03.24
트리거  (0) 2009.03.13
DB 스키마  (0) 2009.03.09
  Comments,     Trackbacks
[sql] 자주 사용하는 쿼리문 정리
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[테이블 구조 보기]

DESC 테이블명;

[칼럼 변경]

1. 칼럼 추가
ALTER TABLE 테이블명 ADD (칼럼명 자료타입 [Defualt 값]);

2. 칼럼 수정
ALTER TABLE 테이블명 MODIFY(칼럼명 자료타입 제약조건 ) ;

3. 칼럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 칼럼이름

[테이블 변경]

1. 테이블 복사
CREATE TABLE 백업테이블명 AS 쿼리문(복사할 테이블);

2. delete 하고 commit 할 경우 데이터 살리기
SELECT * FROM AAA
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);

=> 10분전의 데이터를 보여준다.

[검색 쿼리]

1. like 연산자

조건절에    A.USERID||A.name||D.part_name||a.NICKNAME like '%kang%'
'||' 연산자를 사용하여 여러 개의 칼럼값을 검색 가능하다.

2. where 절에 DECODE와 NVL을 적극 활용할것!

3. IN연산자 NOT IN 연산자 대신 사용하는 쿼리

MSSQL 서버에서 NOT IN을 사용하면 인덱스를 피해간다.
다음과 같이 사용하면 NOT IN을 사용하지 않고 속도 향상을 볼 수 있다.

select * from pwp where [ID] not in (select cn from [USER])
을 아래와 같이 쓰면 좋다.
select count(*) from pwp a where (select count(*) from [user] where cn = a.[id]) = 0


[출처] http://moogi.tistory.com/31
http://soulfly.tistory.com/entry/나의-남편은-개발자

'DEV > DB' 카테고리의 다른 글

DB 스키마  (0) 2009.03.09
export/import  (0) 2008.10.31
10g 에서 테이블 완전 삭제하기.  (0) 2008.09.22
  Comments,     Trackbacks
[db] glongin.sql
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
glongin.sql파일로 define_editor=vi 사용하자.

$> cd $ORACLE_HOME/sqlplus/admin

$> vi glogin.sql

그럼 그다음 ed만 치면 vi editor을 사용 할 수 있다.

vi editor 에서
i = 입력
w = 저장
q = 종료

s 2005 3555 1111 188

'DEV > DB' 카테고리의 다른 글

오라클 리스너(Listener)란?  (0) 2008.07.30
원격으로 오라클에 접속하기  (0) 2008.06.21
[db] rownum, rowid  (0) 2008.06.12
  Comments,     Trackbacks
[db] rownum, rowid
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
rownum 논리적인 값이고 rowid는 물리적인 block주소이다.

rownum은 select된 후에 정해지게 되는데 수시로 바뀐다. 주의!!

select rownum, studno
from student
where rownum =1;

이런식으로 하게 되면 sql문 실행순서에 따라서

from 절의 student 테이블을 먼저 보게 되고

다음 where 절에서 그 테이블에 대한 조건을 수행하는데.

이때 rownum 에 대한 정보는 정해진게 아니므로 where 절의 조건에 해당되는 값이 제대로 나올리 없다.

그다음 select절을 수행하는데 이때 로우넘이 정해진다.


 select prod_no
 from (select rownum a, prod_no
       from product)
 where a = 2

요런식으로 써주자. a 대신 rownum을 쓰게 되면 새로운 rownum이란 값으로 인식되므로 주의!!

'DEV > DB' 카테고리의 다른 글

오라클 리스너(Listener)란?  (0) 2008.07.30
원격으로 오라클에 접속하기  (0) 2008.06.21
[db] glongin.sql  (0) 2008.06.13
  Comments,     Trackbacks