MySQL UNION – 完整教程

什么是 Union?

Union 将多个 SELECT 查询的结果合并到一个统一的结果集中。

要使此功能正常工作,唯一的要求是需要合并的所有 SELECT 查询中的列数必须相同。

假设我们有以下两个表

MySQL UNIONMySQL UNION

现在,我们创建一个 UNION 查询,使用 DISTINCT 来合并这两个表

SELECT column1, column2 FROM `table1`
UNION DISTINCT
SELECT  column1,column2  FROM `table2`;

此处会删除重复行,仅返回唯一行。

Union-Distinct

注意:如果在执行 UNION 查询时未指定任何内容,MySQL 默认使用 DISTINCT 子句。

现在,我们创建一个 UNION 查询,使用 ALL 来合并这两个表

SELECT `column1`,` column1` FROM `table1`
UNION ALL
SELECT ` column1`,` column1`  FROM `table2`;

此处会包含重复行,因为我们使用了 ALL。

Union-All

为什么要使用 Union?

假设您的数据库设计存在缺陷,您使用了两个旨在实现相同目的但不同的表。您希望将这两个表合并到一个表中,同时省略任何重复记录进入新表。在这种情况下,您可以使用 UNION。

摘要

  • UNION 命令用于将一个或多个 SELECT 查询结果合并到一个包含所有 SELECT 查询行的单个查询中。
  • 为了使 UNION 命令正常工作,SELECT 语句中的列数和数据类型必须相同。这些 SELECT 语句必须具有相同的列数和数据类型。
  • DISTINCT 子句用于从 UNION 查询结果集中消除重复值。如果在执行 UNION 查询时未指定任何内容,MySQL 默认使用 DISTINCT 子句。
  • ALL 子句用于在 UNION 查询中返回所有行,即使是重复行。

使用 MySQL Workbench 的实际示例

在我们的 myFlixDB 中,让我们合并

Members 表中的 membership_number 和 full_names

movies 表中的 movie_id 和 title

我们可以使用以下查询

SELECT `membership_number`,`full_names` FROM `members`
UNION
SELECT `movie_id`,`title` FROM `movies`;

MySQL workbench 中针对 myflixdb 执行上述脚本,会得到如下所示的结果。

membership_number full_names
1 Janet Jones
2 Janet Smith Jones
3 Robert Phil
4 Gloria Williams
5 Leonard Hofstadter
6 Sheldon Cooper
7 Rajesh Koothrappali
8 Leslie Winkle
9 Howard Wolowitz
16 67% Guilty
6 Angels and Demons
4 Code Name Black
5 Daddy's Little Girls
7 Davinci Code
2 Forgetting Sarah Marshal
9 Honey mooners
19 movie 3
1 Pirates of the Caribean 4
18 sample movie
17 The Great Dictator
3 X-Men