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

MySQL에서 조회 결과의 중복 행을 제거하는 방법 – DISTINCT 키워드 완벽 가이드

MySQL에서 쿼리가 반환하는 결과 집합에서 중복된 행을 걸러내려면 SELECT 절에 DISTINCT 키워드를 사용하면 됩니다. DISTINCT는 SELECT 절에 지정된 모든 컬럼(데이터 필드)의 조합 전체를 기준으로 적용되며, 지정한 컬럼들의 값이 모두 동일한 행은 하나로 묶여 한 번만 반환됩니다.

DISTINCT 기본 문법

SELECT DISTINCT column1, column2, ... FROM table_name;

예제

다음과 같이 구성된 'Student' 테이블에 DISTINCT 키워드를 적용해 보겠습니다.

mysql> Select * from student;

+------+---------+---------+-----------+
| Id   | Name    | Address | Subject   |
+------+---------+---------+-----------+
| 1    | Gaurav  | Delhi   | Computers |
| 2    | Aarav   | Mumbai  | History   |
| 15   | Harshit | Delhi   | Commerce  |
| 17   | Raman   | Shimla  | Computers |
| 20   | Gaurav  | Jaipur  | History   |
+------+---------+---------+-----------+

5 rows in set (0.00 sec)

1. 특정 컬럼에 DISTINCT 적용하기

Address 컬럼에 DISTINCT를 적용하면 중복 없는 고유한 주소 값만 반환됩니다.

mysql> Select DISTINCT Address from student;

+---------+
| Address |
+---------+
| Delhi   |
| Mumbai  |
| Shimla  |
| Jaipur  |
+---------+

4 rows in set (0.00 sec)

원래 테이블에는 5개의 행이 있지만, Delhi 주소가 두 번 나타나므로 중복이 제거되어 4개의 고유한 값만 결과로 돌아옵니다.

2. DISTINCT * 를 사용하는 경우

모든 컬럼(*)에 DISTINCT를 적용하면, 각 행 전체가 완전히 동일한 경우에만 중복으로 간주하여 제거합니다.

mysql> Select DISTINCT * from student;

+------+---------+---------+-----------+
| Id   | Name    | Address | Subject   |
+------+---------+---------+-----------+
| 1    | Gaurav  | Delhi   | Computers |
| 2    | Aarav   | Mumbai  | History   |
| 15   | Harshit | Delhi   | Commerce  |
| 17   | Raman   | Shimla  | Computers |
| 20   | Gaurav  | Jaipur  | History   |
+------+---------+---------+-----------+

5 rows in set (0.00 sec)

위 예제에서는 모든 행의 Id 값이 서로 다르기 때문에 어떤 행도 완전히 중복되지 않으며, 따라서 5개의 행이 그대로 반환됩니다.

3. Name 컬럼에 DISTINCT 적용하기

mysql> Select DISTINCT name from student;

+---------+
| name    |
+---------+
| Gaurav  |
| Aarav   |
| Harshit |
| Raman   |
+---------+

4 rows in set (0.00 sec)

Gaurav라는 이름이 두 번 등장하지만, 이름 기준으로는 중복이므로 하나만 남고 4개의 고유한 이름이 반환됩니다.

정리 및 참고 사항

  • DISTINCT는 단일 컬럼뿐 아니라 여러 컬럼의 조합에도 적용할 수 있으며, 이 경우 해당 컬럼들의 값 조합이 모두 같은 행만 제거됩니다.
  • DISTINCT는 결과 집합 전체에 영향을 미치므로, 특정 컬럼만 중복 제거하고 다른 컬럼도 함께 조회해야 한다면 GROUP BY나 윈도우 함수(ROW_NUMBER 등)를 활용하는 것이 좋습니다.
  • 대량의 데이터에서 DISTINCT를 사용하면 정렬·비교 작업이 추가되어 성능에 영향을 줄 수 있으므로, 필요한 컬럼만 선택적으로 지정하는 것이 효율적입니다.