UNION操作符用于合并两个或多个SELECT语句的结果集。
注意,UNION内部的每个SELECT语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个SELECT语句的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注释:默认情况下,UNION操作符选取不同的值。如果允许重复的值,请使用UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
注释:UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名。
演示数据库
SQL UNION 示例
SQL 语句从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值)
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
执行结果
注释:UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次。UNION 只会选取不同的值。请使用 UNION ALL 来选取重复的值!
SQL UNION ALL 示例
SQL 语句使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的country(也有重复的值)
SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;
执行结果
带有 WHERE的 SQL UNION ALL
SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;
执行结果
笔记
select country from websites union select country from apps;
--连接两个表的查询结果集,重复的不显示
select country from websites union all select country from apps order by country;
--连接俩个个表的查询结果集,显示重复
select country,name from websites where country = 'CN' union all
select country,app_name from apps where country='CN' order by name;
--通过where条件查询的结果,连接连个表的结果集,并根据名字排序。
注意:
使用UNION命令时需要注意,只能在最后使用一个ORDER BY命令,是将两个查询结果合在一起之后,再进行排序!绝对不能写两个ORDER BY命令。
另外,在使用ORDER BY排序时,注意两个结果的别名保持一致,使用别名排序很方便。当然也可以使用列数。
参考:
https://www.yuque.com/docs/share/9e426c1e-ff2e-437b-83ee-74e041e5e3d9