Programmers Essiontials SQL 강의를 듣고 과제를 풀면서 DISTINCT를 이용해서 문제를 풀었다. 집계함수인 COUNT
함수안에 DISTINCT
를 사용해서 중복되지 않은 컬럼값의 갯수를 구했다.
그런데 나는 DISTINCT
가 함수인줄 알고 DISTINCT (컬럼명)
이렇게 사용을 했는데 알고보니 DISTINCT
는 함수가 아니라 옵션이였다.
그저 중복을 없앨 때 사용하는 명령어인줄말 알았던 DISTINCT
가 함수가 아니라 옵션 키워드였던 것이다.
DISTINCT
SELECT 절에 기본옵션은 ALL이라 컬럼들을 셀렉할때 모두 가져오는 것이고 옵션으로 DISTINCT
을 주면 SELECT
절에 오는 컬럼들 중에서 고유한 값들만 출력하는 것이다.
SELECT DISTINCT prudct_id, order_id
FROM product
product_id
, order_id
를 셀렉트한 집합에서 유니크한 (product_id
, order_id
) 의 집합들의 값들만 출력DISTINCT
집계함수 안에서의 DISTINCT
는 SELECT 절과 반대로 먼저 해당 컬럼 중에 중복되지 않은 컬럼을 가져와 집계함수 처리한다.
SELECT COUNT(DISTINCT prudct_id)
FROM product
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 옵션을 주면 두개의 테이블을 중복테이블을 거르지 않고 모두 합쳐 출력하는 결과를 보여준다.