[Oracle] 데이터 중복 제거 방법 (DISTINCT, GROUP BY)

오라클에서 데이터 조회 시 데이터 중복을 제거하기 위해서는 대표적으로 2가지 방법이 있다. DISTINCT 키워드를 사용하여 중복을 제거하는 방법과, GROUP BY 절을 사용하여 데이터 중복을 제거하는 방법이다.

 

오라클 쿼리문에서 데이터의 중복을 제거할 때는 DISTINCT 키워드를 사용할 것을 권장한다. DISTINCT를 사용하면 쿼리문을 분석할 때 중복을 제거한 결과가 반환된다는 것을 직관적으로 파악이 가능하다. 그러나 상황에 따라서 GROUP BY 절을 사용하여 중복을 제거할 수도 있다.

 

DISTINCT를 사용하여 중복 제거

SELECT DISTINCT
       a.deptno
     , b.dname
  FROM emp a
     , dept b
 WHERE a.deptno = b.deptno
   AND a.sal > 1500

 

 

DISTINCT 키워드를 사용하여 데이터 중복을 제거할 때는 SELECT 절에 DISTINCT 키워드만 명시하면 되므로 쿼리문이 복잡하지 않고 간결하다. 그러나 DISTINCT 키워드를 사용하면 temp tablespace에 임시로 저장하고 작업하는 방식이라서 시스템에 조금 부하가 발생할 수도 있다.

 

GROUP BY 절을 사용하여 중복 제거

SELECT a.deptno
     , b.dname
  FROM emp a
     , dept b
 WHERE a.deptno = b.deptno
   AND a.sal > 1500
 GROUP BY a.deptno, b.dname

 

 

GROUP BY 절을 사용하여 데이터 중복을 제거할 때는 SELECT 절의 칼럼을 GROUP BY절에도 동일하게 명시해야 하는 하므로 쿼리문이 조금 더 길어질 수 있다. DISTINCT에 비하여 조금 더 성능이 좋다고 하지만, 크게 체감은 되지는 않는다. Oracle 10g R2부터는 GROUP BY 절을 사용해도 결과가 자동으로 정렬 되지 않는다. 

예제쿼리(테이블포함).txt
0.00MB

 

[Oracle] 중복 데이터 하나만 남기고 제거 2가지 방법

오라클에서 조회된 데이터에서 특정 칼럼을 기준으로 하나의 행만 조회해야 하는 경우가 있다. 중복된 칼럼의 데이터에서 그룹별로 최신의 행 하나만 가져오거나, 특정 칼럼으로 정렬하여 최상

gent.tistory.com

 

 

댓글

Designed by JB FACTORY