一、UNION 的作用:
【mysql8.0的改进与避坑浅谈】UNION
可以将多个 SELECT
查询语句的结果合并成一个结果集,在MySQL 8.0
中又增添了一些新的功能,我们一起来看下。
二、UNION 操作符的花样展示:
1、温故Union
必须由两条或以上的 SELECT
语句组成,才能使用 Union
连接。Union
中每个查询必须包含相同数量的列或者聚合函数,列名或者别名需要一致。
列数据类型必须兼容,即可以进行隐式类型转换,但可能会出现 SQL
性能问题,建议数据类型相同。
举例如下:
create table t1 (id int, name varchar(20));
insert into t1 values(1,"爱可生"),(2,"开源"),(3,"社区"),(5,"MySQL"),(4,"张");
create table t2 (id int, name varchar(20));
insert into t2 values(3,"中国"),(11,"技术"),(15,"开源"),(2,"社区"),(1,"伟大");
mysql> select id from t1;
+------+
| id|
+------+
|1 |
|2 |
|3 |
|5 |
|4 |
+------+
5 rows in set (0.00 sec)mysql> select id from t2;
+------+
| id|
+------+
|3 |
|11 |
|15 |
|2 |
|1 |
+------+
5 rows in set (0.00 sec)// DISTINCT: 删除结果集中重复的数据。
mysql> select id from t1 union distinct select id from t2;
+------+
| id|
+------+
|1 |
|2 |
|3 |
|5 |
|4 |
|11 |
|15 |
+------+
7 rows in set (0.00 sec)// 默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
mysql> select id from t1 union select id from t2;
+------+
| id|
+------+
|1 |
|2 |
|3 |
|5 |
|4 |
|11 |
|15 |
+------+
7 rows in set (0.00 sec)// ALL: 返回包括重复数据在内的所有结果集。
mysql> select id from t1 union all select id from t2;
+------+
| id|
+------+
|1 |
|2 |
|3 |
|5 |
|4 |
|3 |
|11 |
|15 |
|2 |
|1 |
+------+
10 rows in set (0.00 sec)
使用
`
Union 组合查询时,只能使用一条 order by 子句对结果集进行排序,而且必须出现在最后一条出现的 SELECT 语句之后
推荐阅读
- EEE6207
- MySQL|SQL高级查询
- MySQL|MySQL索引优化及索引失效情况分析
- 数据库操作|mysql范围查找索引失效问题
- Mysql|Skr-Eric的Mysql课堂(四)——Mysql的SQL高级查询
- MySQL|MySQL statefulset_Kubernetes进阶之StatefulSet有状态部署
- MySQL事务学习笔记(二) 相识篇
- Java之路|为什么MySQL不推荐使用uuid作为主键()
- 程序员|官方都不推荐(为什么MySQL不推荐使用uuid作为主键?究竟有什么坏处)