**DISTINCT**는 결과에서 중복 행을 제거하여 유일한 값만 반환합니다. 컬럼(또는 컬럼 조합)의 고유한 값을 얻는 데 사용됩니다 — 유일한 항목을 찾거나 드롭다운 목록을 만드는 데 흔합니다.
DISTINCT — 유일한 값
-- 유일한 country 얻기 (중복 없음)
SELECT DISTINCT country users;
country, city users;
**DISTINCT**는 결과에서 중복 행을 제거하여 유일한 값만 반환합니다. 컬럼(또는 컬럼 조합)의 고유한 값을 얻는 데 사용됩니다 — 유일한 항목을 찾거나 드롭다운 목록을 만드는 데 흔합니다.
-- 유일한 country 얻기 (중복 없음)
SELECT DISTINCT country users;
country, city users;
DISTINCT는 선택된 모든 컬럼을 함께 적용합니다 — DISTINCT country, city는 유일한 조합을 반환하지, 유일한 country와 유일한 city를 따로 반환하지 않습니다.
-- 유일한 country가 몇 개인지 세기
SELECT COUNT(DISTINCT country) FROM users;
-- 모든 행(중복 포함)을 세는 COUNT(*)와 비교
SELECT COUNT(*) FROM users;
COUNT(DISTINCT 컬럼)은 유일한 값을 셉니다 — "서로 다른 X가 몇 개인가?"에 유용합니다.
-- 한 번보다 많이 나타나는 값 찾기 (중복)
SELECT email, COUNT(*) AS count
FROM users
GROUP BY email
HAVING COUNT(*) > 1; -- 행이 하나보다 많은 그룹 = 중복
중복을 단순히 제거하는 게 아니라 찾으려면 GROUP BY + HAVING COUNT(*) > 1을 사용합니다 — 어떤 값이 중복되었고 몇 번인지 식별합니다.
-- 유일한 값을 얻는 데 종종 동등함:
SELECT DISTINCT country FROM users;
SELECT country FROM users GROUP BY country;
-- GROUP BY는 더 유연함 (집계 추가 가능); DISTINCT는 순수 중복 제거에 더 단순함
DISTINCT는 데이터베이스가 유일값을 찾기 위해 행을 비교/정렬해야 함 → 큰 데이터셋에서
비쌀 수 있음. 종종 쿼리를 재구성할 신호 (예: JOIN이 중복을 만들고 DISTINCT가 그것을
제거 — JOIN 자체가 문제인지 고려할 것).
DISTINCT는 중복을 처리하는 유용하고 자주 필요한 SQL 기능입니다. 유일한 값을 얻는 것은 빈번한 요구이므로(드롭다운용 유일한 범주, 고유 항목, 유일 항목 세기), 이해하는 것은 실용적인 일상 지식입니다.
DISTINCT가 어떻게 동작하는지(중복 행 제거, 그리고 여러 컬럼에서는 유일한 조합을 반환 — 흔한 혼동 지점)와 유일값을 세는 COUNT(DISTINCT) 사용법을 아는 것은 전형적인 활용을 다룹니다.
똑같이 가치 있는 것은 실제 중복을 찾는 방법(GROUP BY + HAVING COUNT(*) > 1 사용)을 아는 것입니다 — 데이터 정제와 검증에 흔하고 중요한 작업입니다(중복 email, 레코드 등 식별).
DISTINCT와 GROUP BY의 관계(중복 제거에 종종 동등, GROUP BY가 더 유연)와 성능 참고(DISTINCT는 비교/정렬이 필요해 비쌀 수 있고, 때로는 JOIN이 원치 않는 중복을 만드는 신호)를 이해하는 것도 유용합니다.
중복 처리 — 제거(DISTINCT)와 찾기(GROUP BY/HAVING) 모두 — 는 조회와 데이터 품질 작업에서 흔한 실용적 요구이고, DISTINCT의 동작(특히 여러 컬럼에서)과 대안을 이해하면 혼란과 비효율을 방지하므로, DISTINCT로 중복을 처리하는 법을 아는 것은 유일값을 포함하거나 요구하는 실제 데이터를 다루는 데 유용하고 자주 적용되는 지식입니다.