mysql8.0的改进与避坑浅谈

一、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 语句之后

    推荐阅读