UNION 연산자는 2개 이상의 SELECT 구문을 하나의 결과로 합칠 때 사용한다.
UNION 연산자 사용 시 주의할 점은 아래와 같다.
-- 예제를 위한 새로운 테이블 생성
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);
↑ top_rated_films
↑ most_popular_films
-- UNION
SELECT *
FROM
top_rated_films
UNION
SELECT *
FROM
most_popular_films;
top_rated_films와 most_popular_films가 합쳐짐을 볼 수 있다. 그런데 ‘The Godfather’는 두 테이블에 중복되어 있으므로 UNION의 결과로 중복이 제거 되어 출력된다.
-- UNION ALL의 사용
SELECT *
FROM
top_rated_films
UNION ALL
SELECT *
FROM
most_popular_films;
UNION ALL을 사용하여 앞선 예제에서는 제거 되었던 ‘The Godfather’이 중복 제거 되지 않고 출력됨을 볼 수 있다.
-- ORDER BY와 함께 사용
SELECT *
FROM
top_rated_films
UNION ALL
SELECT *
FROM
most_popular_films
ORDER BY
title;
ORDER BY 결과로 title을 기준으로 오름차순 정렬한 것을 볼 수 있다. UNION과 ORDER BY를 함께 사용할 때에는 ORDER BY를 마지막 쿼리 뒤에 쓴다.
INTERSECT는 두 개 이상의 SELECT문에서 결과를 통합할 때 사용한다.
INTERSECT 연산자 사용 시 주의 사항은 아래와 같다.
-- INTERSECT의 사용
SELECT *
FROM
most_popular_films
INTERSECT
SELECT *
FROM
top_rated_films;
UNION과는 반대로 중복되는 값만 출력된다.
EXCEPT는 두 개 이상의 SELECT 문에서 사용되는데, 첫 번째 쿼리의 결과 데이터 중 두 번째 쿼리의 결과를 제외한 결과를 반환한다.
EXCEPT 연산자 사용 시 주의 사항은 아래와 같다.
-- top_rated_films 기준으로 EXCEPT 사용
SELECT *
FROM
most_popular_films
EXCEPT
SELECT *
FROM
top_rated_films;
‘The Godfather’은 두 번째 쿼리(most_popular_films)의 결과에 포함되어 있으므로, 최종 결과에서는 제외되어 결과 출력됨