本章将讨论 UNION
:联合(并集)查询、INTERSECT
:交集查询和EXCEPT
:差集查询。
数据准备:
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);
联合查询
联合查询用于将多个SELECT
查询的结果组成一个结果集进行返回。
UNION
会将结果中,重复的行去除,如果要保留这些重复的行,可以使用 UNION ALL
。
示例:
交集查询
-- 返回两张表中均存在的数据
SELECT *
FROM most_popular_films
INTERSECT
SELECT *
FROM top_rated_films;
差集查询
返回第一个表中,不存在于第二个表中的记录。
SELECT * FROM top_rated_films
EXCEPT
SELECT * FROM most_popular_films;