안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, 2-6. DISTINCT 문을 이용한 중복 제거를 진행 하겠습니다.
SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록
이번에 진행할 강좌는 중복 제거 - DISTINCT입니다.
TL;DR
DISTINCT 구문을 이용해 로우 데이터 중복을 제거할 수 있습니다. NULL 이 있을 경우 하나의 NULL만 DISTINCT로 나타납니다.
중복 데이터
SELECT Color FROM Production.Product;
위의 쿼리를 실행해 보세요. 504개의 데이터가 들어 있을 겁니다. 데이터를 살펴보면 Color에 중복 데이터가 보입니다. 중복을 제거하고 고유한(unique) 항목만 보는 방법은 없을까요?
중복 제거 DISTINCT
SQL에서 중복을 제거할 때 DISTINCT를 사용합니다.
SELECT DISTINCT Color FROM Production.Product;
Python pands에 익숙하시면 drop_duplicates()와 같은 역할을 합니다.
☑️ 챗GPT 활용: Python pands drop_duplicates에 대해서 알려줘
참고링크: Python 머신러닝 강좌 - 9. 중복데이터와 결측값(missing value) 처리
하나의 컬럼이 아니라 두 개나 그 이상의 컬럼 DISTINCT는 어떨까요?
-- Color 컬럼 DISTINCT SELECT DISTINCT Color FROM Production.Product; -- ReorderPoint 컬럼 DISTINCT SELECT DISTINCT ReorderPoint FROM Production.Product; -- 두 개 컬럼 DISTINCT SELECT DISTINCT Color, ReorderPoint FROM Production.Product;
더 많은 여러 개의 컬럼에서 본다면 어떨까요? 컬럼이 많아지면 로우의 값들은 고유합니다. 그럼 어떻게 될까요?
SELECT * FROM Production.Product;
쿼리를 수행하면 테이블의 여러 컬럼이 리턴됩니다. 결과를 보면 중복되는 로우가 없습니다.
SELECT DISTINCT * FROM Production.Product;
이렇게 수행해도 같은 결과가 나옵니다. 모든 컬럼의 로우들을 비교하면? 중복값이 없기 때문입니다. (기본키 제약이나 UNIQUE 제약 때문이며, 이후 강좌에서 진행합니다.)
NULL 값 DISTINCT
로우에 NULL로 값이 지정되지 않았을 경우, 여러 개의 NULL이 있어도 하나의 NULL만 DISTINCT 결과로 나타나게 됩니다. NULL로 인해 의도하지 않은 DISTINCT가 나올 수도 있으니 주의해야 합니다.
실제 업무에서 DISTINCT는 이후에 배울 그룹 된 결과셋(GROUP BY) 등 여러 형태로 조합되어 사용할 경우가 많습니다. 도움 되시길 바랍니다.
SQL 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.