MySQL 테이블에서 데이터를 조회하다 보면 특정 열에 중복된 값이 여러 개 포함되어 결과 집합이 지저분해지는 경우가 자주 발생합니다. 이럴 때 SELECT 문의 DISTINCT 절을 사용하면 결과 집합에서 중복 데이터를 제거하고 각 열의 고유한(unique) 값만 깔끔하게 추출할 수 있습니다.
DISTINCT 절 기본 문법
SELECT DISTINCT 컬럼명 FROM 테이블명 WHERE 조건;
DISTINCT 키워드를 SELECT 바로 뒤에 붙여주기만 하면, 해당 열에서 중복된 값을 하나로 묶어 반환합니다. WHERE 절은 필요에 따라 생략할 수 있습니다.
예제: 'tender' 테이블로 확인하기
예를 들어 다음과 같은 구조와 데이터를 가진 'tender'라는 테이블이 있다고 가정해 보겠습니다.
mysql> Select * from tender; +----------+--------------+--------------+-------+ | clientid | client_Fname | Client_Lname | value | +----------+--------------+--------------+-------+ | 100 | Mohan | Kumar | 60000 | | 101 | Sohan | Singh | 50000 | | 101 | Somil | Rattan | 55000 | | 103 | Gaurav | Kumar | 75000 | | 103 | Rahul | Singh | 63000 | +----------+--------------+--------------+-------+ 5 rows in set (0.00 sec)
테이블을 보면 client_Lname(성) 열에는 'Kumar'와 'Singh'가 각각 두 번씩 중복되어 나타납니다. 이 상태에서 성(last name)의 고유한 값만 얻고 싶다면 아래와 같이 쿼리를 작성하면 됩니다.
mysql> Select DISTINCT client_Lname from tender; +--------------+ | client_Lname | +--------------+ | Kumar | | Singh | | Rattan | +--------------+ 3 rows in set (0.05 sec)
원래 5개 행에 성이 중복되어 있었지만, DISTINCT 절 덕분에 결과가 Kumar, Singh, Rattan 단 3개의 고유한 값으로 정리되었습니다.
다른 열에도 동일하게 적용 가능
같은 방식으로 client_Fname(이름) 열에도 DISTINCT를 적용할 수 있습니다. 이름 열은 모든 값이 서로 다르므로 전체 행 수와 동일한 5개의 결과가 반환됩니다.
mysql> Select DISTINCT client_Fname from tender; +--------------+ | client_Fname | +--------------+ | Mohan | | Sohan | | Somil | | Gaurav | | Rahul | +--------------+ 5 rows in set (0.00 sec)
정리 및 활용 팁
- DISTINCT는 지정한 열(또는 열 조합) 기준으로 중복을 제거합니다. 여러 열을 함께 지정하면 해당 열들의 조합이 모두 같은 경우에만 중복으로 간주됩니다.
- DISTINCT 처리 시 내부적으로 정렬 작업이 수행될 수 있으므로, 대용량 테이블에서는 인덱스 설계와 함께 사용하면 성능상 유리합니다.
- 단순히 중복 제거가 아니라 그룹별 집계가 필요하다면 GROUP BY 절과 COUNT(), SUM() 등의 집계 함수를 활용하는 것이 더 적합합니다.