C#,Delphi,Oracle,MSSQL 개발자블로그
[Oracle] GROUP BY와 DISTINCT의 구분 본문
DISTINCT와 GROUP BY절
- - DISTINCT와 GROUP BY 개념에 대해서 좀 더 이해를 해보자.
- - DISTINCT는 주로 UNIQUE(중복을 제거)한 컬럼이나 레코드를 조회하는 경우 사용한다.
- - GROUP BY는 데이터를 그룹핑해서 그 결과를 가져오는 경우 사용한다.
- - 하지만 두 작업은 조금만 생각해보면 동일한 형태의 작업이라는 것을 쉽게 알 수 있으며, 일부 작업의 경우 DISTINCT로 동시에 GROUP BY로도 처리될 수 있는 쿼리들이 있다.
- - 두 기능 모두 Oracle9i까지는 sort를 이용하여 데이터를 만들었지만, Oracle10g 부터는 모두 Hash를 이용하여 처리한다.
- - 그래서 DISTINCT를 사용해야 할지, GROUP BY를 사용해서 데이터를 조회하는 것이 좋을지 고민되는 경우들이 가끔 있다.
아래의 예제는 동일한 결과를 반환한다.
|
-- DISTINCT를 사용한 중복 데이터 제거 SELECT DISTINCT deptno FROM emp; -- GROUP BY를 사용한 중복 데이터 제거 SELECT deptno FROM emp GROUP BY deptno; DEPTNO ------ 30 20 10 |
하지만 곰곰히 생각해 보면 GROUP BY와 DISTINCT는 각자 고유의 기능이 있다
집계함수를 사용하여 특정 그룹으로 구분 할 때는GROUP BY 절을 사용하며, 특정 그룹 구분없이 중복된 데이터를 제거할 경우에는 DISTINCT 절을 사용 하도록 하자
|
-- 아래와 같은 기능은 DISTINCT를 사용하는 것이 훨씬 효율적이다. SELECT COUNT ( DISTINCT d.deptno) "중복제거 수" , COUNT (d.deptno) "전체 수" FROM emp e, dept d WHERE e.deptno = d.deptno; -- 집계 함수가 필요한 경우는 GROUP BY를 사용해야 한다. SELECT deptno, MIN (sal) FROM emp |
'Programming > Oracle' 카테고리의 다른 글
[Oracle] TABLE에서 행을 삭제하는 세 가지 OPTION의 비교 (0) | 2017.05.23 |
---|---|
[Oracle] DB 기본 용어 (SQL, DDL, DML, DCL, TCL) (0) | 2017.05.23 |
[Oracle] 날짜타입의 년도표시 Y와 R 의 차이점. (0) | 2017.05.19 |
[Oracle] sysdate와 systimestamp의 차이 (1) | 2017.05.19 |
2-Tier와 3-Tier의 비교 (0) | 2017.05.19 |
Comments