Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL DISTINCT 절로 결과 집합에서 고유한 값만 조회하는 방법

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() 등의 집계 함수를 활용하는 것이 더 적합합니다.