MySQL中将多个select语句的查询结果合并一起的方法
admin
2023-05-17 19:22:12
0次

下文给大家带来有关MySQL中将多个select语句的查询结果合并一起的方法内容,相信大家一定看过类似的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完MySQL中将多个select语句的查询结果合并一起的方法你一定会有所收获。

1. 背景

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

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

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


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

   * 查看 users1 表和 users2 表结构

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    |                |
+-------+---------------+------+-----+---------+----------------+
4 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    |                |
+-------+---------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)


   * 查看 users1 表和 users2 表数据

    users1和users2表中有相同字段 tom

mysql> select * from users1;
+----+------+-----+-----+
| id | name | sex | age |
+----+------+-----+-----+
|  1 | tom  | M   |  25 |
|  2 | jak  | F   |  42 |
+----+------+-----+-----+
2 rows in set (0.00 sec)

mysql> select * from users2;
+----+-------+-----+-----+
| id | name  | sex | age |
+----+-------+-----+-----+
|  1 | tom   | M   |  25 |
|  2 | lisea | M   |  42 |
+----+-------+-----+-----+
2 rows in set (0.00 sec)


   * union 合并并去重

MySQL中将多个select语句的查询结果合并一起的方法

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


   * union all 只全并不去重

MySQL中将多个select语句的查询结果合并一起的方法

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 |
+----+-------+-----+-----+
4 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 |  | 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. 总结

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

对于上文关于MySQL中将多个select语句的查询结果合并一起的方法,大家觉得是自己想要的吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...