[오라클 SQL] ROWID 를 이용한 중복 제거 하는 방법


 

안녕하세요.

오늘은 오라클에서 ROWID를 이용하여 데이터 중복 제거하는 방법에 대해서 알려드리고자 합니다.

 

오라클에서 데이터를 중복 제거하는 방법에 대해서는 여러가지 방법이 있겠지만, 오늘 포스팅에서는 ROWID를 이용하여 데이터 중복을 조회하여 제거하는 방법을 SQL 예제를 통하여 보여드리고자 합니다.

 

해당 문법을 숙지하시면, 실무에서도 여러방면으로 응용하여 사용하실 수 있기 때문에 한번씩 예제를 따라해 보시고 이해를 하시면 좋을 것 같아요!

 

그럼 바로 예제 코드를 통하여 어떻게 중복 제거를 찾고, 삭제를 하는지 보여드릴게요.

 

첫 번째로 아래와 같이 STUDENT 테이블이 있습니다.



위에 STUDENT 테이블을 보시게 되면 현재 NAME범범조조라는 사람이 현재 2명으로 중복으로 데이터가 삽입된 모습을 확인하실 수 있습니다.

 

그러면 일단, ROWID를 이용한 SQL문을 작성한 후에 NAME 컬럼을 기준으로 중복된 데이터를 조회해 보도록 하겠습니다.

 

예상이 되시겠지만 당연히 범범조조라는 사람이 조회될 것으로 예상이 됩니다.

 

SQL 문


1

2

3

4

5

6

SELECT CLASS, NAME, AGE, GRADE

FROM WIN.STUDENT a

WHERE  1 = 1

AND ROWID > ANY (SELECT ROWID FROM WIN.STUDENT b

                        WHERE 1 = 1

                        AND a.NAME = b.NAME)

cs

 

실행 결과



위와 같이 중복된 데이터인 범범조조데이터 하나가 조회 된 것을 확인하실 수 있습니다.

 

여기서 해당 데이터를 지우시려면 위의 쿼리에서 SELECT문을 DELETE 문으로만 바꿔 주시면 됩니다~~


 

추가적으로 위의 쿼리는 제일 먼저 들어온 데이터만 남기고 그 외의 중복된 데이터는 모두 지우는 방식인데요.

 

혹시나, 제일 나중에 들어온 중복 데이터를 살리시고 싶으신 경우는 아래와 같은 쿼리를 작성하시면 됩니다.

 

나중에 들어온 데이터 살릴 경우


1

2

3

4

5

SELECT CLASS, NAME, AGE, GRADE

FROM WIN.STUDENT A

WHERE 1 = 1

AND ROWID < (SELECT MAX(ROWID) FROM WIN.STUDENT B

                      WHERE A.NAME = B.NAME)

cs

 

위와 같은 쿼리를 이용하여 마찬가지로 SELECT 문을 DELETE 문으로만 바꿔서 실행해 주시면 중복 데이터를 삭제하실 수 있습니다.^^

 

글 읽어 주셔서 감사합니다~~


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY