본문 바로가기
Oracle/운영

Oracle 데이터 중복값 쿼리로 확인하기

by 취미툰 2022. 12. 8.
반응형

테이블 내에서 중복값을 확인해야 할 일이 있어서 아래글을 참고하여 확인 후에,

제가 한번 더 테스트하여 정리하고자 글을 올립니다.

 

출처 : https://gent.tistory.com/485

 

[Oracle] 오라클 중복 데이터를 찾는 2가지 방법

오라클에서 중복 데이터를 추출하거나 찾기 위해서는 GROUP BY 절과 집계 함수를 사용하거나, OVER 절과 분석함수를 사용하는 방법이 있다. GROUP BY 절을 사용할 경우 중복 칼럼에 대한 건수만 조회

gent.tistory.com

 

제가 겪었던 상황은 특정 파티션테이블의 인덱스가 UNUSABLE상태로 빠져있어서 rebuild를 시도했는데, 중복값이 있어서 rebuild가 안되는 상황이었습니다.

그래서 실제로 데이터가 중복값이 있는지 확인해보았습니다.

저는 emp테이블로 중복값을 확인해보겠습니다.

 

기본 emp 테이블 확인

중복값이 없는 14개의 값이 들어 있습니다.

SQL> select * from emp;

EMPNO ENAME      JOB       MGR   HIREDATE             SAL       COMM      DEPTNO 
----- ---------- --------- ----- -------------------- --------- --------- ------ 
 7839 KING       PRESIDENT                                 5000               10
 7698 BLAKE      MANAGER    7839                           2850               30
 7782 CLARK      MANAGER    7839                           2450               10
 7566 JONES      MANAGER    7839                           2975               20
 7654 MARTIN     SALESMAN   7698                           1250      1400     30
 7499 ALLEN      SALESMAN   7698                           1600       300     30
 7844 TURNER     SALESMAN   7698                           1500         0     30
 7900 JAMES      CLERK      7698                            950               30
 7521 WARD       SALESMAN   7698                           1250       500     30
 7902 FORD       ANALYST    7566                           3000               20
 7369 SMITH      CLERK      7902                            800               20
 7788 SCOTT      ANALYST    7566                           3000               20
 7876 ADAMS      CLERK      7788                           1100               20
 7934 MILLER     CLERK      7782                           1300               10

14 rows selected.

 

7839와 7788번을 한번 더 삽입하여 두개의 데이터가 중복값이 생기게 합니다.

insert into emp
select * from emp where empno in (7839,7788);

commit;

SQL> select * from emp;

EMPNO ENAME      JOB       MGR   HIREDATE             SAL       COMM      DEPTNO 
----- ---------- --------- ----- -------------------- --------- --------- ------ 
 7839 KING       PRESIDENT                                 5000               10
 7788 SCOTT      ANALYST    7566                           3000               20
 7839 KING       PRESIDENT                                 5000               10
 7698 BLAKE      MANAGER    7839                           2850               30
 7782 CLARK      MANAGER    7839                           2450               10
 7566 JONES      MANAGER    7839                           2975               20
 7654 MARTIN     SALESMAN   7698                           1250      1400     30
 7499 ALLEN      SALESMAN   7698                           1600       300     30
 7844 TURNER     SALESMAN   7698                           1500         0     30
 7900 JAMES      CLERK      7698                            950               30
 7521 WARD       SALESMAN   7698                           1250       500     30
 7902 FORD       ANALYST    7566                           3000               20
 7369 SMITH      CLERK      7902                            800               20
 7788 SCOTT      ANALYST    7566                           3000               20
 7876 ADAMS      CLERK      7788                           1100               20
 7934 MILLER     CLERK      7782                           1300               10

16 rows selected.

 

중복값 확인하는 쿼리(GROUP BY 사용)

중복이 의심되는 컬럼값을 GROUP절에 넣어서 COUNT(*) >1 인 컬럼을 구하면 됩니다.

 

SQL> select empno,ename,deptno,count(*) as cnt from emp
group by empno,ename,deptno having count(*) > 1;

EMPNO ENAME      DEPTNO CNT       
----- ---------- ------ --------- 
 7788 SCOTT          20         2
 7839 KING           10         2

2 rows selected.

 

임의로 삽입했던 7788,7839의 count가 2로 보이면서 중복값이 있는것을 확인 할 수 있습니다.

반응형

댓글