最新文章
- MySQL中, group by 和 order by 一起使用会有排序问题,group by 和 order by 同时使用时要注意的地方
- Vue学习笔记(10) ——Vue组件中的data和methods
- Vue学习笔记(9) ——Vue组件创建的几种方式
- Vue学习笔记(8) ——Vue实例的生命周期
- Vue学习笔记(7) —— 过滤器 filter的基本使用
- Vue学习笔记(6) ——v-if指令和v-show指令
- Vue学习笔记(5) —— v-for指令和key属性
- Vue学习笔记(5) —— Vue中样式-class样式和style样式
- Vue学习笔记(4) —— v-model指令,双向数据绑定
- Vue学习笔记(3) —— Vue事件修饰符
关注我

在线咨询
x
有什么可以帮到你

点击咨询
MySQL中的 union 查询
- 分类:MySQL技术
- 时间:2017-11-19
- 共608人围观
简介UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
同时,每条 SELECT 语句中的列的顺序必须相同。
一、什么是 union 查询
union 查询就是把 2 条或多条 sql 的查询结果 , 合并成 1 个结果集
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
同时,每条 SELECT 语句中的列的顺序必须相同.
语法:
sql1 返回 N 行 sql2 返回 M 行 sql1 union sql2 返回 N+M 行
1. 用 union 查询栏目 3 和栏目 4 下面的商品
select goods_id,goods_name,cat_id,shop_price from goods where cat_id=3 union select goods_id,goods_name,cat_id,shop_price from goods where cat_id=4;
2. 查询网站此时用户 , 合并可以是两张相同的表 , 也可以是不同的表
用户表user和临时用户表tmp, 查询网线现在用户和临时用户一共有多少人
select uid,name from user union select id,name from tmp; # union 语句必须满足1个条件: 各语句取出的列数相同
如果不相同, 会报错, 列数不同 , 如下 sql
select uid,name,age from user union select id,name from tmp; # 可以看出,列名称未必要一致 , 查询出的结果列名称会使用第一条 sql 的列名称为准
3. union 查询 a 表和 b 表 , 看返回的是不是 N+M 行
select * from a union select * from b;
注意 :
使用 union 时 , 完全相等的行 , 将会被合并,合并是比较耗时的操作 , 两行会在比较看是否完全相等
一般不让 union 进行合并 , 使用 "union all" 可以避免
select * from a union all select * from b; # 实际中 , 一般使用 union all 来合并查询
4. union 的子句中 , 不用写 order by
(select * from a order by num desc) union all (select * from b order by num desc); # 我们发现 , 写了 order by 并没有发挥作用,sql 合并后得到的总的结果 , 可以 order by, 子句的 order by 失去意义 比如 : 比如 , 华西村 , 南街村 ,2 个村各出 3 人 , 去当兵 , 那么在村子里排序是没有什么意义的 , [x,f,d ],[z, k, c] 到部队里 , 还会对这些人再进行排序 所以 , 合并后仍是无序的 , 因此子句内排序没什么意义
union 合并后得到的总的结果集 , 是可以去排序的
(select * from a order by num desc) union all (select * from b order by num desc) order by num desc;
查询出来的结果当作一张表 , 再 select
select id,sum(num) from (select * from a union all select * from b) as tmp group by id;
上一篇:MySQL中的JOIN连接
下一篇:MySQL中的视图