안녕하세요.
6강 시작합니다.
이제 SQL에 어느 정도 익숙해지셨죠?
입맛에 맞는 Query Tool은 찾으셨나요?
이번 강의에서는
▶ SELECT DISTINCT
에 대해서 알아보겠습니다.
DISTINCT를 대신해 GROUP BY 절로 구현할 수도 있으나 DISTINCT가 성능 면에서
빠른 것으로 알려져 있습니다.
1. SELECT DISTINCT
DISTINCT명령어는 결과 세트에서 중복 행을 제거하기 위해 사용됩니다.
DISTINCT절은 중복된 각 그룹에 대해 1개의 행을 유지합니다.
DISTINCT절은 컬럼중 하나 이상의 열에 적용할 수 있습니다.
● 기본구문 ●
SELECT
DISTINCT column1
FROM
table_name;
위 명령은 column 1을 중복을 제거하는 데 사용합니다.
SELECT
DISTINCT column1, column2
FROM
table_name;
위 명령은 column1과 column2를 중복을 제거하는데 사용합니다.
SELECT
DISTINCT ON (column1) column_alias,
column2
FROM
table_name
ORDER BY
column1,
column2;
DISTINCT ON은 다른 DBMS에서 볼 수 없었던 PostgreSQL만의
고유한 기능인 것 같습니다. (확신 없음, 저는 처음 봅니다.)
먼저 DISTINCT ON에 지정된 column1으로 DISTINCT를 수행합니다.
이후에 column2에는 1개의 행만 가져옵니다. 이때 어떤 행을 가져올지는
ORDER BY 절에 따라 정해집니다.
dvdrental DB에는 실습할 테이블이 없어서
distinct_demo 테이블을 생성하고 데이터를 입력해 보겠습니다.
아래 SQL을 실행합니다.
CREATE TABLE distinct_demo (
id serial NOT NULL PRIMARY KEY,
bcolor VARCHAR,
fcolor VARCHAR
);
INSERT INTO distinct_demo (bcolor, fcolor)
VALUES
('red', 'red'),
('red', 'red'),
('red', NULL),
(NULL, 'red'),
('red', 'green'),
('red', 'blue'),
('green', 'red'),
('green', 'blue'),
('green', 'green'),
('blue', 'red'),
('blue', 'green'),
('blue', 'blue');
실행 후, 테이블의 데이터를 확인합니다.
SELECT
id,
bcolor,
fcolor
FROM
distinct_demo ;
생성된 distinct_demo 테이블을 가지고 실습을 진행합니다.
★ 실습1 ★ DISTINCT column1 (1개의 열만 지정한 경우)
SELECT
DISTINCT bcolor
FROM
distinct_demo
ORDER BY
bcolor;
bcolor 를 대상으로 DISTINCT를 수행하고, ORDER BY 조건을 따른다.
알파벳순으로 정렬하고 NIULL은 마지막
SELECT
DISTINCT bcolor
FROM
distinct_demo
ORDER BY
bcolor DESC;
bcolor 를 대상으로 DISTINCT를 수행하고, ORDER BY 조건을 따른다.
알파벳역순으로 정렬하고 NIULL은 처음
★ 실습2 ★ DISTINCT column1, column2 (여러개의 열을 지정한 경우)
SELECT
DISTINCT bcolor,
fcolor
FROM
distinct_demo
ORDER BY
bcolor,
fcolor;
2개의 열을 조합해서 DISTINCT 합니다.
ORDER BY 조건에 따라 정렬합니다.
전체 DATA에서 보면, red red 행이 2개이므로 1행이 제거되었습니다.
★ 실습3 ★ DISTINCT ON
SELECT
DISTINCT ON (bcolor) bcolor,
fcolor
FROM
distinct_demo
ORDER BY
bcolor,
fcolor;
DISTINCT ON에 지정된 bcolor로 DISTINCT를 수행
bcolor를 asc으로 정렬
fcolor는 asc으로 정렬하여 1개행만 반환
SELECT
DISTINCT ON (bcolor) bcolor,
fcolor
FROM
distinct_demo
ORDER BY
bcolor,
fcolor DESC;
DISTINCT ON에 지정된 bcolor로 DISTINCT를 수행
bcolor를 asc으로 정렬
fcolor는 desc으로 정렬하여 1개행만 반환
★ 요약 ★
● DISTINCT 1개의 열이면, 1개의 열로 중복 제거하고 order by 순으로 정렬
● DISTINCT 여러 개의 열이면, 여러 개의 열 조합으로 중복 제거하고 order by 순으로 정렬
● DISTINCT ON은 ON에 기술된 열 또는 열 조합으로 중복 제거하고, order by 순으로 정렬
따라서 N개의 열로 중복 제거하고, (N+M) 개의 열을 보고자 할 때 유용
실제 적용 예는 계속 관찰해봐야 할 것 같음.
수고하셨습니다.
다음 강의에서 만나요~~~
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
8강 SQL이 뭐지? PostgreSQL LIMIT와 FETCH (3) | 2022.12.14 |
---|---|
7강 SQL이 뭐지? WHERE 절 (3) | 2022.12.13 |
5강 SQL이 뭐지? Column Aliases ORDER BY (4) | 2022.12.13 |
4강 SQL이 뭐지? 너와의 첫 만남... 살짝 설렜어... (6) | 2022.12.12 |
3강 SQL이 뭐지? 도구들을 설치해보자. ( PostgreSQL, HeidiSQL ) (17) | 2022.12.10 |
댓글