当前位置:网站首页>mysql的union和union all
mysql的union和union all
2022-08-03 09:16:00 【及时机芯】
1. sql中 union 和 union all 的用法
如果我们需要将两个 select 语句的结果作为一个整体显示出来,我们就需要用到 union 或者 union all 关键字。union (或称为联合)的作用是将多个结果合并在一起显示出来。
union 和 union all 的区别是,union 会自动压缩多个结果集合中的重复结果,而 union all 则将所有的结果全部显示出来,不管是不是重复。
union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;union 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表 union。
如下sql:
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
UNION
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
结果:
union all:对两个结果集进行并集操作,包括重复行,不进行排序; 如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
如下sql:
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
UNION ALL
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
结果:
2. 注意事项
2.1、UNION 和 UNION ALL 内部的 SELECT 语句必须拥有相同数量的列
2.2、每条 SELECT 语句中列的顺序必须相同
先来说下,如果顺序不同,会是什么结果?
答:结果字段的顺序以union all 前面的表字段顺序为准。
union all 后面的表的数据会按照顺序依次附在后面。注意:按照字段顺序匹配,而不是按照字段名称匹配。sql如下:顺序对结果的影响
SELECT *
FROM(
SELECT msku,create_time FROMe_msku_sku
WHERE msku = ‘21-BQLEDNL120W-BK’
UNION ALL
SELECT create_time,msku FROMe_msku_sku
WHERE msku = ‘21-BQLEDNL120W-BK’) t
综上:
union all 结果字段的顺序以 union all 前面的表字段顺序为准。union all 后面的表的数据会按照字段顺序依次附在后面,而不是按照字段名称匹配。
我们上面以*来表示顺序的不同,其实你写成不同顺序的字段结果一致。
3. union all 使用场景
修改前:组合in sql
SELECT ***, ***, ***, ***, ***
FROM e_rating_info
WHERE rating_quantity <> 0 AND (***, ***)
IN (('***', '***'), ('***', '***'),
('***', '***'), ('***', '***'),
('***', '***'), ('***', '***'),
('***', '***'), ('***', '***'),
('***', '***'), ('***', '***'))
ORDER BY *** DESC
修改后:UNION ALL sql
<select id="queryRatingInfo" resultType="***">
<foreach collection="ratingList" item="item" index="index" open="" separator="UNION ALL" close="">
SELECT ***, ***, ***, ***, ***
FROM e_rating_info
WHERE rating_quantity <> 0
AND country_code = #{item.***}
AND asin = #{item.***}
</foreach>
ORDER BY *** DESC;
</select>
另外,如果系统中进行了分表,一定要保证各个表的字段顺序一致。特别是修改的时候。否则,如果使用 *汇总查询结果,肯定是会有问题的…亲身踩坑。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- 【论文笔记】基于动作空间划分的MAXQ自动分层方法
- 【网络安全】Kail操作系统
- LINGO 18.0软件安装包下载及安装教程
- WinCheck Script
- JMeter接口自动化发包与示例
- Exception: Dataset not found. Solution
- Machine learning (formula derivation and code implementation)--sklearn machine learning library
- gpnmb+ gpnmb-AT2 cell idling mapping Epithelial cell idling mapping
- 别人都不知道的“好用”网站,让你的效率飞快
- bihash总结
猜你喜欢
Rabbit and Falcon are all covered, Go lang1.18 introductory and refined tutorial, from Bai Ding to Hongru, the whole platform (Sublime 4) Go lang development environment to build EP00
SQL每日一练(牛客新题库)——第5天:高级查询
dflow入门1——HelloWorld!
LeetCode 每日一题——622. 设计循环队列
二叉查找树的综合应用
xtrabackup
Batch PNG format can be converted to JPG format
MySQL2
PostgreSQL的架构
When deleting a folder, the error "Error ox80070091: The directory is not empty" is reported. How to solve it?
随机推荐
The display of the article list and the basics of creating articles and article details
STP生成树(端口状态+端口角色+收敛机制 )|||| STP优化技术( uplinkfast技术+Portfast技术+backbonefast技术 )详解
selenium IDE的3种下载安装方式
【LeetCode】226.翻转二叉树
JMeter接口自动化发包与示例
dflow入门3——dpdispatcher插件
Qt 下拉复选框(MultiSelectComboBox)(一) 实现下拉框多选,搜索下拉框内容
System io statistics
文章列表的显示 以及创建文章 还有文章详情的基本
C# 一周入门高级编程之《C#-接口》Day Two
Exception: Dataset not found.解决办法
基于百度AI和QT的景物识别系统
110道 MySQL面试题及答案 (持续更新)
【无标题】
判断根节点是否等于子节点之和
浅聊缓存函数
分区分表(一)
兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00
scala reduce、reduceLeft 、reduceRight 、fold、foldLeft 、foldRight
gpnmb+ gpnmb-AT2 cell空转映射 上皮细胞的空转映射