MySQL UNION – 完整教程
什么是联盟?
联合将多个 SELECT 查询的结果合并为一个合并结果集。
要使其工作,唯一的要求是所有需要合并的 SELECT 查询的列数应该相同。
假设我们有如下两个表
现在让我们创建一个 UNION 查询来使用 DISTINCT 合并两个表
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1,column2 FROM `table2`;
这里删除了重复的行并仅返回唯一的行。
请注意: MySQL 如果未指定任何内容,则执行 UNION 查询时默认使用 DISTINCT 子句。
现在让我们创建一个 UNION 查询来使用 ALL 合并两个表
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
这里包括重复的行,因为我们使用 ALL。
为什么要使用 Union?
假设您的数据库设计存在缺陷,并且您正在使用两个用于相同目的的不同表。您想将这两个表合并为一个,同时避免任何重复记录潜入新表。在这种情况下,您可以使用 UNION。
结语
- UNION 命令用于将多个 SELECT 查询结果组合成一个包含所有选择查询的行的单个查询。
- 列数和数据类型 SELECT 语句 必须相同才能使 UNION 命令起作用。
- DISTINCT 子句用于从 UNION 查询结果集中消除重复值。 MySQL 如果未指定任何内容,则执行 UNION 查询时使用 DISTINCT 子句作为默认子句。
- ALL 子句用于返回 UNION 查询中的所有行,甚至重复的行。
使用实例 MySQL 工作台
在我们的 myFlixDB 中让我们结合
来自“会员”表的 membership_number 和 full_names
-
电影表中的 movie_id 和 title
我们可以使用以下查询
SELECT `membership_number`,`full_names` FROM `members` UNION SELECT `movie_id`,`title` FROM `movies`;
在以下位置执行上述脚本 MySQL 工作台 针对 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 |