23강 SQL이 뭐지? PostgreSQL UNION
PostgreSQL
SQL이 뭐지? 23강 시작합니다.
이번 강의에서는
▶ PostgreSQL UNION
에 대해서 알아보겠습니다.
여러 쿼리의 결과 집합을 단일 결과 집합으로 결합하는 PostgreSQL UNION 연산자에 대해서 공부합니다.
Introduction to PostgreSQL UNION operator
UNION 연산자는 두 개 이상의 SELECT 문의 결과 집합을 단일 결과 집합으로 결합합니다.
다음은 두 쿼리의 결과 집합을 결합하는 UNION 연산자의 구문을 보여줍니다.
SELECT select_list_1
FROM table_expresssion_1
UNION
SELECT select_list_2
FROM table_expression_2
UNION 연산자를 사용하여 두 쿼리의 결과 집합을 결합하려면 쿼리가 다음 규칙을 준수해야 합니다.
● 두 쿼리의 선택 목록에 있는 열의 수와 순서가 같아야 합니다.
● 데이터 유형이 호환되어야 합니다.
UNION 연산자는 결합된 데이터 집합에서 중복된 행을 모두 제거합니다. 중복 행을 유지하려면 UNION ALL을 대신 사용합니다.
다음 Venn digram은 UNION의 작동 방식을 보여줍니다.
PostgreSQL UNION with ORDER BY clause
UNION 연산자는 첫 번째 쿼리 결과 집합의 행을 두 번째 쿼리 결과 집합의 앞, 뒤, 또는 두 번째 쿼리 결과 집합의 행 사이에 배치할 수 있습니다.
최종 결과 집합의 행을 정렬하려면 두 번째 쿼리의 ORDER BY 절을 사용합니다.
실제로 UNION 연산자를 사용하여 데이터 웨어하우스 또는 비즈니스 인텔리전스 시스템에서 완벽하게 정규화되지 않은 유사한 테이블의 데이터를 결합하는 경우가 많습니다.
PostgreSQL UNION examples
PostgreSQL UNION 연산자를 사용하는 몇 가지 예를 들어 보겠습니다.
Setting up sample tables
다음 문은 top_rated_films와 most_popular_films의 두 테이블을 만들고 이 테이블에 데이터를 삽입합니다.
DROP TABLE IF EXISTS top_rated_films;
CREATE TABLE top_rated_films(
title VARCHAR NOT NULL,
release_year SMALLINT
);
DROP TABLE IF EXISTS most_popular_films;
CREATE TABLE most_popular_films(
title VARCHAR NOT NULL,
release_year SMALLINT
);
INSERT INTO
top_rated_films(title,release_year)
VALUES
('The Shawshank Redemption',1994),
('The Godfather',1972),
('12 Angry Men',1957);
INSERT INTO
most_popular_films(title,release_year)
VALUES
('An American Pickle',2020),
('The Godfather',1972),
('Greyhound',2020);
COMMIT;
다음은 top_rated_films 테이블의 데이터를 보여줍니다.
SELECT * FROM top_rated_films;
다음은 most_popular_films 테이블의 데이터를 보여줍니다.
SELECT * FROM most_popular_films;
1) Simple PostgreSQL UNION example
다음 문은 UNION 연산자를 사용하여 두 테이블의 데이터를 결합합니다.
SELECT * FROM top_rated_films
UNION
SELECT * FROM most_popular_films;
쿼리는 다음 결과를 반환합니다.
UNION 연산자가 중복된 행 하나를 제거하므로 결과 집합에는 5개의 행이 포함됩니다.
The Godfather이 중복 제거되었습니다.
2) PostgreSQL UNION ALL example
다음 문은 UNION ALL 연산자를 사용하여 top_rated_films 테이블과 most_popular_films 테이블의 결과 집합을 결합합니다.
SELECT * FROM top_rated_films
UNION ALL
SELECT * FROM most_popular_films;
이 예에서는 중복 행이 결과 집합에 유지됩니다.
3) PostgreSQL UNION ALL with ORDER BY clause example
UNION 연산자가 반환한 결과를 정렬하려면 마지막 쿼리의 ORDER BY 절 끝에 다음과 같이 배치합니다.
SELECT * FROM top_rated_films
UNION ALL
SELECT * FROM most_popular_films
ORDER BY title;
각 쿼리 끝에 ORDER BY 절을 배치하면 결합된 결과 집합이 예상대로 정렬되지 않습니다.
UNION 연산자가 각 쿼리의 정렬된 결과 집합을 결합할 때 최종 결과 집합의 행 순서를 보장하지 않기 때문입니다.
이번 강의에서는 여러 쿼리의 결과 집합을 단일 결과 집합으로 결합하는 PostgreSQL UNION과 UNION ALL 에 대해서 배웠습니다.
UNION 과 UNION ALL의 차이는 중복제거입니다.
수고하셨습니다.
본 강의는 PostgreSQL Tutorial을 참조합니다.
실습용 테이블에 대해서는 3강을 참조하세요.
Do it! SQL을 찾아 주셔서 감사합니다. 여러분의 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
25강 SQL이 뭐지? PostgreSQL HAVING (2) | 2022.12.20 |
---|---|
24강 SQL이 뭐지? PostgreSQL INTERSECT (2) | 2022.12.19 |
22강 SQL이 뭐지? PostgreSQL GROUP BY (3) | 2022.12.19 |
21강 SQL이 뭐지? PostgreSQL NATURAL JOIN (2) | 2022.12.19 |
20강 SQL이 뭐지? PostgreSQL Cross Join (2) | 2022.12.19 |
댓글