DB(MySQL) - DISTINCT

2562 단어 dbmysqldb

DISTINCT 키워드

갑자기 DISTINCT ?

Programmers Essiontials SQL 강의를 듣고 과제를 풀면서 DISTINCT를 이용해서 문제를 풀었다. 집계함수인 COUNT 함수안에 DISTINCT 를 사용해서 중복되지 않은 컬럼값의 갯수를 구했다.

그런데 나는 DISTINCT 가 함수인줄 알고 DISTINCT (컬럼명) 이렇게 사용을 했는데 알고보니 DISTINCT 는 함수가 아니라 옵션이였다.

그저 중복을 없앨 때 사용하는 명령어인줄말 알았던 DISTINCT 가 함수가 아니라 옵션 키워드였던 것이다.

SELECT 절과 집계함수에서의 DISTINCT

SELECT 절에서의 DISTINCT

SELECT 절에 기본옵션은 ALL이라 컬럼들을 셀렉할때 모두 가져오는 것이고 옵션으로 DISTINCT 을 주면 SELECT 절에 오는 컬럼들 중에서 고유한 값들만 출력하는 것이다.

Example

SELECT DISTINCT prudct_id, order_id
FROM product
  • product_id, order_id 를 셀렉트한 집합에서 유니크한 (product_id, order_id) 의 집합들의 값들만 출력

집계함수 에서의 DISTINCT

집계함수 안에서의 DISTINCT 는 SELECT 절과 반대로 먼저 해당 컬럼 중에 중복되지 않은 컬럼을 가져와 집계함수 처리한다.

Example

SELECT COUNT(DISTINCT prudct_id)
FROM product

UNION 절에서의 DISTINCT

UINION 절은 형식이 같은 두개의 테이블을 합칠 때 사용한 집합연산자인데, SELECT 절에서의 기본옵션이 ALL인 것과는 반대로 UNION 절에서의 기본옵션은 DISTINCT 이다.

예를 들어

SELECT product_id, product_name
FROM s_product
UINON 
SELECT product_id, product_name
FROM r_product

이면 중복되지 않게 두개의 테이블을 합쳐 출력하는데 DISTINCT가 기본옵션으로 되어있는 것이고

SELECT product_id, product_name
FROM s_product
UINON ALL
SELECT product_id, product_name
FROM r_product

위의 UNINON 집합연산자에 ALL 옵션을 주면 두개의 테이블을 중복테이블을 거르지 않고 모두 합쳐 출력하는 결과를 보여준다.

좋은 웹페이지 즐겨찾기