MySQL DML操作--------合并查询结果实战

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

1. 背景

   * 全并查询结果是将多个 select 语句的查询结果合并到一起。

   * 参与合并的结果集需要字段统一。

   * 字段可以用空字符串''代替。


2. 合并查询结果实战 [ users1 and users2 ]

   * 查看 users1 表和 users2 表结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql>  desc  users1;
+ -------+---------------+------+-----+---------+----------------+
| Field | Type          |  Null  Key  Default  | Extra          |
+ -------+---------------+------+-----+---------+----------------+
| id    |  bigint (20)    |  NO    | PRI |  NULL     | auto_increment |
name   varchar (64)   |  NO    |     |  NULL     |                |
| sex   | enum( 'M' , 'F' ) |  NO    |     |  NULL     |                |
| age   |  int (11)       |  NO    |     |  NULL     |                |
+ -------+---------------+------+-----+---------+----------------+
rows  in  set  (0.00 sec)
 
mysql>  desc  users2;
+ -------+---------------+------+-----+---------+----------------+
| Field | Type          |  Null  Key  Default  | Extra          |
+ -------+---------------+------+-----+---------+----------------+
| id    |  bigint (20)    |  NO    | PRI |  NULL     | auto_increment |
name   varchar (64)   |  NO    |     |  NULL     |                |
| sex   | enum( 'M' , 'F' ) |  NO    |     |  NULL     |                |
| age   |  int (11)       |  NO    |     |  NULL     |                |
+ -------+---------------+------+-----+---------+----------------+
rows  in  set  (0.01 sec)


   * 查看 users1 表和 users2 表数据

    users1和users2表中有相同字段 tom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql>  select  from  users1;
+ ----+------+-----+-----+
| id |  name  | sex | age |
+ ----+------+-----+-----+
|  1 | tom  | M   |  25 |
|  2 | jak  | F   |  42 |
+ ----+------+-----+-----+
rows  in  set  (0.00 sec)
 
mysql>  select  from  users2;
+ ----+-------+-----+-----+
| id |  name   | sex | age |
+ ----+-------+-----+-----+
|  1 | tom   | M   |  25 |
|  2 | lisea | M   |  42 |
+ ----+-------+-----+-----+
rows  in  set  (0.00 sec)


   * union 合并并去重

wKiom1lYV0OxySZRAAA41trCYeE559.jpg

1
2
3
4
5
6
7
8
9
mysql> ( select  from  users1)  union  ( select  from  users2);
+ ----+-------+-----+-----+
| id |  name   | sex | age |
+ ----+-------+-----+-----+
|  1 | tom   | M   |  25 |
|  2 | jak   | F   |  42 |
|  2 | lisea | M   |  42 |
+ ----+-------+-----+-----+
rows  in  set  (0.00 sec)


   * union all 只全并不去重

wKioL1lYV2OSruMiAAA4XimrKQk585.jpg

1
2
3
4
5
6
7
8
9
10
mysql> ( select  from  users1)  union  all  ( select  from  users2);
+ ----+-------+-----+-----+
| id |  name   | sex | age |
+ ----+-------+-----+-----+
|  1 | tom   | M   |  25 |
|  2 | jak   | F   |  42 |
|  1 | tom   | M   |  25 |
|  2 | lisea | M   |  42 |
+ ----+-------+-----+-----+
rows  in  set  (0.01 sec)


   * 查看union  性能分析

      [ 使用了临时表 ]

mysql> explain (select * from users1) union (select * from users2);
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------+
| id | select_type  | table      | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra           |
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------+
|  1 | PRIMARY      | users1     | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    2 |   100.00 | NULL            |
|  2 | UNION        | users2     | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    2 |   100.00 | NULL            |
| NULL | UNION RESULT | <union1,2> | NULL       | ALL  | NULL        | NULL | NULL    | NULL | NULL |     NULL | Using temporary |
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------+
3 rows in set, 1 warning (0.01 sec)


   * 查看union all 性能分析

     [ 未使用临时表 ]

mysql> explain (select * from users1) union all (select * from users2);
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table  | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | PRIMARY     | users1 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    2 |   100.00 | NULL  |
|  2 | UNION       | users2 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    2 |   100.00 | NULL  |
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------+
2 rows in set, 1 warning (0.01 sec)


3. union 与 union all 总结

   * union 相对于 union all多了一步去重操作,此操作会创建临时表,降低性能。

   * 当两边结果集数据相对都确定了唯一性,推荐使用union all。


4. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。







      本文转自asd1123509133 51CTO博客,原文链接:http://blog.51cto.com/lisea/1943768,如需转载请自行联系原作者




相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
SQL 关系型数据库 MySQL
MySQL查询语句优化的十个小技巧!
查询语句的优化是SQL效率优化的一个方式,可以通过优化sql语句来尽量使用已有的索引,避免全表扫描,从而提高查询效率。最近在对项目中的一些sql进行优化,总结整理了一些方法。
9 1
|
5天前
|
SQL 存储 算法
mysql常用指令操作
mysql常用指令操作
|
24天前
|
SQL 缓存 关系型数据库
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
39 0
|
27天前
|
存储 SQL 关系型数据库
MySQL - 深入理解锁机制和实战场景
MySQL - 深入理解锁机制和实战场景
|
2天前
|
关系型数据库 MySQL
Mysql基础第二十天,组合查询
Mysql基础第二十天,组合查询
12 0
Mysql基础第二十天,组合查询
|
2天前
|
存储 SQL 关系型数据库
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
42 0
|
2天前
|
SQL 存储 关系型数据库
【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句
【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句
34 0
|
5天前
|
SQL 存储 关系型数据库
Mysql内核查询成本计算
Mysql内核查询成本计算
|
5天前
|
SQL 算法 关系型数据库
MySQL索引优化实战二
MySQL索引优化实战二
|
5天前
|
SQL 存储 关系型数据库
Mysql索引优化实战一
Mysql索引优化实战一