域名 AXUM.RS 将于2025年10月到期。我们无意再对其进行续费,我们希望你能够接续这个域名,让更多 AXUM 开发者继续受益。现在,我们已启用新域名 AXUM.EU.ORG
  • 方案AXUM.RS 域名 = 3000
如果你有意接续这份 AXUM 情怀,请与我们取得联系。
说明:
  1. 如果有人购买 AXUM.RS 域名,或者该域名到期,本站将使用免费域名 AXUM.EU.ORG 继续提供服务。

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

本章将讨论 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 返回的字段的数据类型、顺序、个数要一致。

示例:

-- 简单示例:组合两张表的数据
SELECT * FROM top_rated_films
UNION
SELECT * FROM most_popular_films;
/*
结果只有5行,因为UNION 删除了1个重复行:title 为 'The Godfather'的行
*/

-- 简单示例:组合两张表的数据,并保留重复行
SELECT * FROM top_rated_films
UNION ALL
SELECT * FROM most_popular_films;

-- 与 ORDER BY 配合
SELECT * FROM top_rated_films
UNION ALL
SELECT * FROM most_popular_films
ORDER BY title;

差集查询

SELECT * FROM top_rated_films
EXCEPT 
SELECT * FROM most_popular_films;
要查看完整内容,请先登录