SQL문을 작성하다보면 SELECT을 정말 다양하게 하게 되는데 오늘은 중복값없이 출력하는 것을 알아보겠습니다.
select문 기본 구조는 SELECT 필드명 FROM 테이블 WHERE 조건
으로 가장 많이 쓰이는 형태는 아래와 같습니다.
SELECT * FROM 테이블 WHERE 조건 ORDER BY 컬럼 DESC(또는 ASC);
이 형태는 WHERE 절의 조건을 만족하는 테이블의 모든 데이터를 ORDER BY 기준 DESC(내림차순)/ASC(오름차순) 입니다.
오늘 글의 핵심인 SELECT문 시 여러개의 같은 데이터를 반환하는 경우가 있는데 이때 중복 데이터를 정리하고 싶을 때 어떻게 하는지 알아보겠습니다.
두가지 방법이 있는데 DISTINCT 와 GROUP BY가 있습니다.
DISTINCT는 중복값만 제거해 줍니다.
SELECT DISTINCT 필드명 FROM 테이블 WHERE 조건;
이런 형식으로 SELECT 바로 뒤에 위치하여 사용하게 됩니다.
GROUP BY도 중복값을 제거하며, DISTINCT와 다른 점은 정렬도 같이 진행합니다.
SELECT 필드명 FROM 테이블 WHERE 조건 GROUP BY 조건;
이런 형식으로 WHERE절 뒷쪽에 위치하게됩니다.
🚨 SQL문은 반드시 SELECT 컬럼명 FROM 테이블명 WHERE 조건 GROUP BY 조건 HAVING 조건 ORDER BY 조건 DESC(또는 ASC) 순으로 작성해야 오류가 발생되지 않습니다.
위에서 언급했듯 두 개의 차이는 정렬을 해주냐 안 해주냐의 차이가 제일 큽니다.
그렇다면 정렬을 해주는 GROUP BY가 좋은 것이 아니냐! 라고 생각하실 수 있지만, GROUP BY가 DISTINCT보다 수행해야하는 일이 많기 때문에 당연히 성능은 DISTINCT가 좋을 수 밖에 없습니다. 어떤 것에 더 주안점을 두고 쿼리를 작성하느냐에 따라 선택이 달라질 수 있습니다.
단순히 중복값 제거만 한다면 DISTINCT를 사용하는 것을 추천합니다.
하지만, 그 외에 HAVING이라던지 COUNT라던지 GROUP BY를 하여 부수적인 작업을 해야한다면 그땐 당연히 GROUP BY를 하는 것을 추천합니다.