SQL에서 중복 내용을 배제하고 결과를 보여주고 싶을 때 DISTINCT를 사용한다. DISTINCT는 하나에 칼럼에 적용하기도 하고 두 개 이상의 칼럼에 적용하기도 한다.
DISTINCT
SQL을 이용해 데이터를 조회할 때 자료의 종류만 필요하거나 여러 칼럼에 걸쳐서 같은 데이터가 나오는 것들을 배제해야 하는 경우가 있다. 그럴 때 DISINCT를 사용할 수 있다. 보통 한 컬럼 내의 자료의 중복을 제거할 때는 잘 사용하는데 여러 칼럼에 걸쳐서 사용하는 것은 직관적으로 기억이 잘 나지 않을 수 있다. 이번 기회를 통해서 잘 기억해보도록 하자.
01 중복을 제거하는 DISTINCT
데이터를 추출하다 보면 중복되는 데이터가 발생한다. 예를 들어 구매자 목록을 볼 때 중복 구매자들은 구매자 목록에 중복으로 존재한다. 이럴 때 중복을 제거하고 싶을 때 사용하는 DISTINCT에 대해서 알아보려 한다.
SELECT DISTICNT COLUMN
FROM TABLE
;
DISTINCT는 SELECT절에서 중복을 제거하고 싶은 칼럼 앞에 써주므로써 작성된다.
EXAMPLE
판매리스트에서 어떤 물품이 판매되었는지 알려주세요.
SELECT DISTINCT 제품명
FROM 판매리스
;
판매된 품목 리스트가 필요할 때 중복된 자료는 제거하는 것이 좋다. 따라서 이렇게 제품명 앞에 DISTSINCT를 써준다.
02. 두 개에 칼럼에 작용했을 때
보통은 칼럼들의 데이터 속성이 많이 달라서 겹치지 않기 때문에 DISTINCT를 사용했을 때 그 칼럼내의 중복만 제거하는 것처럼 보인다. 하지만 두 가지 같은 속성을 갖지만 다른 칼럼이라면 DISTICTRK 두 칼럼이 같은 열에서 중복되는 것들을 걸러준다.
SELECT DISTINCT COLUMN01, COLUMN02
FROM TABLE
;
다음의 결과를 보면 이해가 쉽다.
---원래 컬럼 ---중복 제거 된 컬럼
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ COL1 │ COL2 │ │ COL1 │ COL2 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ A │ A │ │ 중복 제거 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ A │ B │ │ A │ B │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ A │ C │ │ A │ C │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ B │ A │ │ B │ A │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ B │ B │ │ 중복 제거 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ B │ C │ │ B │ C │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ C │ A │ │ C │ A │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ C │ B │ │ C │ B │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ C │ C │ │ 중복 제거 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
SELECT 절에서 DISTINCT 뒤에 두 개의 컬럼을 연달아 작성 시 두 칼럼이 중복되는 열을 뺀 결과를 보여준다.
EXAMPLE
매년 몇 가지 데이터베이스 시스템을 다룰 수 있는지 설문조사를 한다. 다룰 수 있는 시스템의 수가 변한 사람들을 확인하려고 한다.
SELECT NAME, DISTINCT 2020_SURVAY, 2021_SURVAY
FROM TEAM_DB
;
03. 두 개 이상의 칼럼중에서 한 칼럼에 대해서만 중복을 제거하고 싶을 때
02의 사례처럼 두 칼럼의 중복 여부 말고 한 칼럼내의 중복 내용을 제거하고 싶을 때는 한 칼럼을 특정해주는 작업을 해줘야 한다. 이를 위해 DISTINCT ON을 사용한다.
SELECT DISTINTC ON (COLUMN01), COLUMN02
FROM TABLE
;
앞에서 살펴본 방식을 여기에 적용해서 다시 살펴보면 이해가 쉽다.
---원래 컬럼 ---중복 제거 된 컬럼
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ COL1 │ COL2 │ │ COL1 │ COL2 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ A │ A │ │ A │ A │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ A │ B │ │ 중복 제거 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ A │ C │ │ 중복 제거 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ B │ A │ │ B │ A │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ B │ B │ │ 중복 제거 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ B │ C │ │ 중복 제거 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ C │ A │ │ C │ A │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ C │ B │ │ 중복 제거 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
│ C │ C │ │ 중복 제거 │
┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼
COL1을 기준으로 중복 된 것이 있으면 제거하고 하나만 남겨둔다. COL2는 정렬상 첫 번째 결과만 남고 나머지는 제거된다. 만약 COL2가 역순으로 정렬되었다면 C의 결괏값만 남았을 것이다.
정리
- 칼럼내 중복 데이터 배제를 위해서 SELECT절에서 칼럼명 앞에 DISTINCT를 써준다.
- 여러 칼럼에 걸쳐 중복 데이터를 배제할 경우엔 SELECT절에서 첫 칼럼명 앞에 DISTINCT를 써준 후 콤마(,)로 구분 지어 칼럼명들을 써준다.
- 여러 컬럼을 조회하면서 한 칼럼 내의 중복 데이터만 배제를 할 경우 DISTINCT뒤에 ON (칼럼명)의 형식으로 중복 배제할 칼럼을 특정해준다.
'ICT > SQL' 카테고리의 다른 글
SQL 문법 | 데이터 조회 및 필터 | FETCH (0) | 2021.08.28 |
---|---|
SQL 문법 | 데이터 조회 및 필터 | LIMIT & OFFSET (0) | 2021.08.28 |
SQL 문법 | 데이터 조회 및 필터 | WHERE (0) | 2021.08.26 |
SQL 문법 | 데이터 조회 및 필터 | ORDER BY (0) | 2021.08.25 |
SQL 문법 | 데이터 조회 및 필터 | SELECT (0) | 2021.08.24 |
댓글