联合查询(并集)、交集查询及差集查询

180
2023/07/29 15:06:28

本章将讨论 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;