DDL, DML, DCL을 공부하다가 정리해야할 것 같아서 여기로 왔다.
GROUP BY, HAVING : GROUP BY는 주로 중복을 제거하게 된다. GROUP BY로 조회한 컬럼에 대한 조건을
다룬다. GROUP BY, DISTINCT 둘 다 중복제거인데 무슨 차이가 있지?
어떤 글에서는 GROUP BY가 중복을 제거하고 자동 집계를 하므로 DISTINCT가 중복 자체는 더 효율적이라고 한다.
그 글에서는 맞고 나의 글에서는 틀리다.
다음의 간단한 예시를 보자.

이미지를 보면 정렬이 되지 않은 기본 조회문이다.


위를 보면 각각 DISTINCT와 GROUP BY이다. 결과 값이 똑같이 나오며 정렬이 된다면 beta가 먼저 나와야 한다.
하지만 둘 다 beta가 먼저 나오지는 않지만 [ aaa, alpah ]의 경우는 정렬을 해준 것을 볼 수 있다.
이는 DBMS가 자체적으로 DISTINCT나 GROUP BY를 내부적으로 판단하기 때문이다.
그러므로 적어도 Oracle의 경우에는 정렬을 하려면 ORDER BY 해주는 것이 안전하다
그런데 내가 참고한 글의 경우에는 GROUP BY의 경우 자동으로 정렬해주는 것이 맞다.
그리고 또한 일반적인 DB는 DISTINCT의 경우 중복 제거만을 위한 경우에 사용하므로 집계나 정렬이 필요없을
경우에는 GROUP BY보다 성능적으로 우수하고 복잡하지 않은 것도 맞다.
그러므로 결론은 DBMS에 따라 내부적으로 진행되는 방식이 다르므로 DBMS의 특징을 잘 이해하고 숙지하는 것이
중요하다. 또한 일반적으로 중복 제거만을 위해서는 DISTINCT가 성능적으로 우수한 것은 맞지만 집계나 통계같은
것을 위해서는 GROUP BY가 효율적이다.
'DB > 이론' 카테고리의 다른 글
| Oracle - INDEX (0) | 2024.06.22 |
|---|---|
| 인덱스(Index) Re (0) | 2024.06.21 |
| VARCHAR, CHAR (0) | 2024.06.21 |
| [ Full Table Scan ] vs [ Index Scan ] (0) | 2024.06.18 |
| DDL, DML, DCL (0) | 2024.06.18 |