본문 바로가기
  • BLG-ZYNGIROK-모토-꿈꾸며-배우고-나누며-이루다
ICT/SQL

SQL 문법 | 데이터 조회 및 필터 | DISTINCT

by dazwischen 2021. 8. 26. 16:34
반응형

SQL에서 중복 내용을 배제하고 결과를 보여주고 싶을 때 DISTINCT를 사용한다. DISTINCT는 하나에 칼럼에 적용하기도 하고 두 개 이상의 칼럼에 적용하기도 한다.

sql-distinct-썸네일-이미지
SQL 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 (칼럼명)의 형식으로 중복 배제할 칼럼을 특정해준다.

 

반응형

댓글