MySQL UNION – 完整教程
什么是 Union?
Union 将多个 SELECT 查询的结果合并到一个统一的结果集中。
要使此功能正常工作,唯一的要求是需要合并的所有 SELECT 查询中的列数必须相同。
假设我们有以下两个表
现在,我们创建一个 UNION 查询,使用 DISTINCT 来合并这两个表
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1,column2 FROM `table2`;
此处会删除重复行,仅返回唯一行。
注意:如果在执行 UNION 查询时未指定任何内容,MySQL 默认使用 DISTINCT 子句。
现在,我们创建一个 UNION 查询,使用 ALL 来合并这两个表
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
此处会包含重复行,因为我们使用了 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 |