[MYSQL] SELECT 시 중복값 어떻게 처리해?

Katherine12·2022년 12월 16일
0

MYSQL

목록 보기
1/1
post-thumbnail

SQL문을 작성하다보면 SELECT을 정말 다양하게 하게 되는데 오늘은 중복값없이 출력하는 것을 알아보겠습니다.

1. SELECT문 기본 구조

select문 기본 구조는 SELECT 필드명 FROM 테이블 WHERE 조건으로 가장 많이 쓰이는 형태는 아래와 같습니다.

SELECT * FROM 테이블 WHERE 조건 ORDER BY 컬럼 DESC(또는 ASC);

이 형태는 WHERE 절의 조건을 만족하는 테이블의 모든 데이터를 ORDER BY 기준 DESC(내림차순)/ASC(오름차순) 입니다.

2. SELECT 시 같은 데이터 어떻게 처리?

오늘 글의 핵심인 SELECT문 시 여러개의 같은 데이터를 반환하는 경우가 있는데 이때 중복 데이터를 정리하고 싶을 때 어떻게 하는지 알아보겠습니다.
두가지 방법이 있는데 DISTINCT 와 GROUP BY가 있습니다.

2-1) DISTINCT

DISTINCT는 중복값만 제거해 줍니다.

SELECT DISTINCT 필드명 FROM 테이블 WHERE 조건;

이런 형식으로 SELECT 바로 뒤에 위치하여 사용하게 됩니다.

2-2) GROUP BY

GROUP BY도 중복값을 제거하며, DISTINCT와 다른 점은 정렬도 같이 진행합니다.

SELECT 필드명 FROM 테이블 WHERE 조건 GROUP BY 조건;

이런 형식으로 WHERE절 뒷쪽에 위치하게됩니다.

🚨 SQL문은 반드시 SELECT 컬럼명 FROM 테이블명 WHERE 조건 GROUP BY 조건 HAVING 조건 ORDER BY 조건 DESC(또는 ASC) 순으로 작성해야 오류가 발생되지 않습니다.

2-3) DISTINCT VS GROUP BY

위에서 언급했듯 두 개의 차이는 정렬을 해주냐 안 해주냐의 차이가 제일 큽니다.
그렇다면 정렬을 해주는 GROUP BY가 좋은 것이 아니냐! 라고 생각하실 수 있지만, GROUP BY가 DISTINCT보다 수행해야하는 일이 많기 때문에 당연히 성능은 DISTINCT가 좋을 수 밖에 없습니다. 어떤 것에 더 주안점을 두고 쿼리를 작성하느냐에 따라 선택이 달라질 수 있습니다.

단순히 중복값 제거만 한다면 DISTINCT를 사용하는 것을 추천합니다.
하지만, 그 외에 HAVING이라던지 COUNT라던지 GROUP BY를 하여 부수적인 작업을 해야한다면 그땐 당연히 GROUP BY를 하는 것을 추천합니다.


참고 Blog

into MySQL

profile
Node.js 와 친해지고 있는 서버개발자입니다 :)

0개의 댓글