기초 SQL입문

DISTINCT 중복 제거

결과에서 중복된 행을 제거하고 고유한 행만 반환하는 키워드

정의

결과 중에 똑같은 행이 여러 번 나올 때 한 번씩만 보여준다. "SELECT DISTINCT 부서" 라고 하면 부서 목록을 한 번씩만 가져온다. 중복 판단은 SELECT에 적은 모든 컬럼 조합을 기준으로 한다.

왜 중요한가?

중복된 결과를 제거할 때 쓰지만 남용하면 안 된다. 데이터가 많으면 모든 행을 비교해야 하므로 느려지고, 사실 JOIN 조건이 잘못되어 중복이 생긴 걸 DISTINCT로 가리는 경우가 많다. 중복의 원인을 먼저 찾는 게 우선이다.

틀리기 쉬운 포인트

  • !DISTINCT는 특정 컬럼 하나가 아닌 SELECT의 모든 컬럼 조합 기준으로 중복을 제거합니다. SELECT DISTINCT name, dept_id는 (name, dept_id) 쌍이 동일한 행만 제거합니다.
  • !COUNT(DISTINCT 컬럼)과 COUNT(컬럼)은 다릅니다. 전자는 고유 값 수, 후자는 NULL이 아닌 전체 행 수입니다.
  • !DISTINCT 남용은 보통 JOIN 조건이 잘못되어 중복 행이 생긴 것을 숨기는 경우가 많습니다. 중복의 원인을 먼저 확인하세요.

예시

SELECT DISTINCT department_id
FROM employees;

성능 포인트

!DISTINCT 남용은 JOIN 키 누락의 신호일 수 있다. 원인을 찾아 JOIN을 고치는 것이 우선.

관련 개념

관련 문제 풀어보기

관련 카테고리