-- 메뉴가 존재하는 카테고리의 종류를 뽑을 때 Distinct를 쓸 수 있다.
SELECT
distinct category_code
-- , menu_name distinct 사용 시에는 일반 컬럼을 사용할 수 없다.(distinct가 무의미 해지기 때문에)
FROM tbl_menu;
SELECT
DISTINCT category_code
FROM tbl_menu
ORDER BY category_code;
-- null 값을 포함한 컬럼의 distinct
SELECT
DISTINCT ref_category_code
FROM tbl_category;
-- null을 나중으로 보내는 정렬을 해보자.
-- 결과가 출력 되긴 했으나 원하는 결과가 아님(결과값 ref_category_code: 3, 2, 1, null)
SELECT
DISTINCT ref_category_code
FROM tbl_category
ORDER BY 1 desc;
-- 정답
SELECT
DISTINCT ref_category_code AS 'rcc'
FROM tbl_category
ORDER BY -rcc DESC;
-- 기본 정렬의 개념(순번이나 별칭을 사용하지 않고는 정렬할 수 없다.)은
-- syntax 에러(문법 에러)가 발생한다.
SELECT
DISTINCT ref_category_code
FROM tbl_category
ORDER BY DISTINCT ref_category_code DESC; -- 에러발생
-- ------------------------------------------------------------------------------------
-- 컬럼 두 개 이상도 distinct로 묶을 수는 있지만 좋은 형태는 아니다.
-- 컬럼 두 개 이상부터는 이후 배율 group by절을 통해 중복 제거를 하자.
SELECT
DISTINCT category_code, orderable_status
FROM tbl_menu;
-- 메뉴가 존재하는 카테고리의 종류를 뽑을 때 DISTINCT를 사용
SELECT
DISTINCT category_code
-- DISTINCT 사용 시에는 일반 컬럼을 사용할 수 없다.(DISTINCT가 무의미해지기 때문에)
FROM tbl_menu;
-- DISTINCT 사용과 정렬
SELECT
DISTINCT category_code
FROM tbl_menu
ORDER BY category_code;
-- NULL 값을 포함한 컬럼의 DISTINCT
SELECT
DISTINCT ref_category_code
FROM tbl_category;
-- NULL을 나중으로 보내는 정렬
-- 결과가 ref_category_code: 3, 2, 1, NULL로 출력됨
SELECT
DISTINCT ref_category_code
FROM tbl_category
ORDER BY ref_category_code DESC NULLS LAST;
-- DISTINCT와 ORDER BY의 조합
SELECT
DISTINCT ref_category_code
FROM tbl_category
ORDER BY -ref_category_code DESC NULLS FIRST;
-- 기본 정렬의 개념: DISTINCT는 ORDER BY와 함께 사용할 때, DISTINCT 키워드는 ORDER BY 절 안에 포함될 수 없음.
SELECT
DISTINCT ref_category_code
FROM tbl_category
ORDER BY ref_category_code DESC; -- 이 형태로 작성해야 합니다.
-- 컬럼 두 개 이상도 DISTINCT로 묶을 수 있지만 좋은 형태는 아님.
-- 이후의 배율 GROUP BY 절을 통해 중복 제거를 권장.
SELECT
DISTINCT category_code, orderable_status
FROM tbl_menu;
MySQL과 Oracle
- NULL 처리에서 NULLS LAST와 NULLS FIRST의 사용: Oracle에서 NULL 값을 정렬할 때 NULLS LAST와 NULLS FIRST를 사용합니다. NULLS LAST는 내림차순 정렬에서 NULL을 마지막에 배치하고, NULLS FIRST는 내림차순에서 NULL을 처음에 배치한다.
- DISTINCT와 ORDER BY 사용: MySQL에서 ORDER BY 절에 DISTINCT를 사용할 수 없다는 점은 Oracle에서도 동일하게 적용된다. DISTINCT는 SELECT 절에서만 사용되며, ORDER BY 절에 직접 포함할 수 없다.
- 다중 열에 대한 DISTINCT: 다중 열을 DISTINCT로 묶을 수 있지만, Oracle에서도 이 방법보다는 GROUP BY 절을 통해 중복을 제거하는 것이 권장되고 있다.