728x90
오라클(Oracle)에서 데이터를 조회할 때, 중복 제거하는 방법으로는
1. distinct 를 거는 방법 과 2. group by 절을 사용하는 방법이 있다.
Group by
- Group by 는 데이터들을 원하는 그룹으로 나눌 수 있음.
- 나누고자 하는 그룹의 컬럼명을 SELECT절과 GROUP BY절 뒤에 추가하면 됨.
- 집계함수와 함께 사용하는 상수는 GROUP BY절에 추가하지 않아도 됨.
SELECT deptno 부서번호, COUNT(*) 사원수
FROM emp
GROUP BY deptno
ORDER BY COUNT(*) DESC;
Distinct
- 중복된 행을 제거하고 데이터를 추출하기 위한 용도로 사용.
SELECT distinct deptno 부서번호, COUNT(*) 사원수
FROM emp
ORDER BY COUNT(*) DESC;
이렇게 나열해두고 보니 두개 다 중복 제거를 위한 것 같은데...
무슨 차이가 있을까 ?
Group by 와 Distinct 의 차이
- Distinct 는 주로 Unique(중복 제거)한 컬럼이나 레코드를 조회하는 경우에 사용.
- Group by는 데이터를 그룹핑해서 그 결과 값을 가져오는 경우 사용.
두 가지 작업은 조금만 생각해보면 동일한 형태의 작업이라는 것을 깨닫게 되는데..
실제로 일부 작업의 경우 Distinct 로도, Group by 로도, 처리가 될 수 있는 경우가 많다.
기능면
집계함수를 사용하여 특정 그룹으로 구분할 때에는 Group by 사용
특정 그룹 구분 없이 중복 데이터 제거 시에는 DISTINCT 사용
성능면
distinct 키워드를 사용하면 쿼리문은 복잡하지 않으나, temp tablespace에 임시로 저장하고 작업하는 방식이라 시스템에 부하를 줄 수 있음.
group by절을 이용하면 쿼리문은 복잡해지나, distinct와 비교하면 성능이 좋음.
데이터가 적고 간단한 쿼리문은 Distinct를 사용.
데이터가 많고 시스템에 부하를 줄 수 있는 쿼리문은 group by절 사용.
일반적인 데이터 조회의 경우는 어떤 방법을 선택하던 조회 성능은 비슷함...
728x90