UNION 和 UNION ALL 用法及区别

UNION

UNION 是一个用于合并多个 SELECT 查询结果的操作符。它的作用是将多个查询的结果集合并为一个结果集,并去除重复的行。

主要特点和作用如下:

  • 合并结果集:UNION 操作符可以将多个查询的结果集合并为一个结果集。每个查询的结果集必须具有相同的列数和相似的数据类型。

  • 去除重复行:与 UNION ALL 操作符不同,UNION 会去除合并结果集中的重复行,只保留一份。它通过对结果集进行去重操作来实现。

  • 排序结果:UNION 默认会对合并后的结果集进行排序,以确保返回的结果是按照默认顺序排列的。如果需要自定义排序顺序,可以使用外部的 ORDER BY 子句来指定排序条件。

  • 数据类型匹配:在使用 UNION 进行结果集合并时,需要确保每个查询的选择列表中的列具有相似的数据类型,或者可以进行隐式类型转换。否则,可能会导致错误或意外的结果。

使用示例:

Copy code
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2

上述示例中,UNION 操作符将 table1 和 table2 的查询结果合并为一个结果集,并去除重复的行。

需要注意的是,UNION 操作符在进行结果集合并时会进行排序和去重操作,这可能会对性能产生一定的影响。如果确保结果集中不会存在重复的行,并且不需要进行排序,可以考虑使用性能更高的 UNION ALL 操作符。

总结起来,UNION 是用于合并多个查询结果集的操作符,它合并结果集并去除重复行,适用于需要合并结果集并去重的场景

UNION ALL

UNION ALL 是一个用于合并多个 SELECT 查询结果的操作符。它的作用是将多个查询的结果集合并为一个结果集,包含所有查询的结果,不去除重复行。

主要特点和作用如下:

  • 合并结果集:UNION ALL 操作符可以将多个查询的结果集合并为一个结果集。每个查询的结果集必须具有相同的列数和相似的数据类型。

  • 保留重复行:与 UNION 操作符不同,UNION ALL 不会去除重复的行。它简单地将所有查询的结果按照顺序连接起来,保留所有行,包括重复的行。

  • 性能优化:相对于 UNION 操作符,UNION ALL 的性能更高,因为它不需要进行重复行的去重操作。如果你确定结果集中不会存在重复的行,可以使用 UNION ALL 来获得更好的性能。

适用场景:UNION ALL 适用于需要合并多个查询结果集,并且不需要去除重复行的场景。例如,你可能需要从多个表或查询中检索相似的数据,然后将它们合并到一个结果集中进行进一步的处理或展示。

使用示例:

Copy code
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2

上述示例中,UNION ALL 操作符将 table1 和 table2 的查询结果合并为一个结果集,包含所有行。

需要注意的是,UNION ALL 不会对结果进行排序,默认情况下返回的结果是按照查询的顺序排列的。如果需要对结果进行排序,可以使用外部的 ORDER BY 子句来指定排序条件

总结起来,UNION ALL 是用于合并多个查询结果集的操作符,它保留所有行,不去除重复的行,适用于需要合并结果集并且不需要去重的场景。

例子

在这里插入图片描述
我们需要做的是将这张表转换 成行格式的数据。这里使用UNION ALL来实现。

--列数据转换成行数据:使用UNION ALL
SELECT employee, child_1 AS child FROM Personnel UNION ALL
SELECT employee, child_2 AS child FROM Personnel UNION ALL
SELECT employee, child_3 AS child FROM Personnel;
  • 执行结果

在这里插入图片描述

在这里插入图片描述

因为 UNION All 不会排除重复的行,所以即使吉田没有孩子,结果也会出现3行相关的数据
果里也会出现 3 行相关数据。把结果存入表时,最好先排除掉“child”列 为 NULL 的行。

如果使用UNION 连接,sql 和结果如下

SELECT child_1 FROM Personnel
UNION
SELECT child_2 FROM Personnel 
UNION
SELECT child_3 FROM Personnel;
  • 执行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15935.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Llama.cpp在CPU上快速的运行LLM

大型语言模型(llm)正变得越来越流行,但是它需要很多的资源,尤其时GPU。在这篇文章中,我们将介绍如何使用Python中的llama.cpp库在高性能的cpu上运行llm。 大型语言模型(llm)正变得越来越流行,但是它们的运行在计算上是非常消耗资源…

干了4年外包,技术落后得明显,感觉要被行业优化了

先说一下自己的情况。大专生,19年通过校招进入深圳某软件公司,干了接近4年的测试,今年年中旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了4年,…

Django实现简单的音乐播放器 1

使用django框架开发一个简单的音乐播放器。 效果: 目录 环境准备 安装django 创建项目 创建应用 注册应用 配置数据库 设置数据库配置 设置pymysql库引用 创建数据库 创建数据表 生成表迁移文件 执行表迁移 配置时区 配置语言 配置子应用路由 在pla…

WHERE条件和ON条件的区别

目录 总结: 1.inner join方式关联 2.left join方式关联 实例 1.建表 2.left join 主表的on和where条件 3.left join 关联表的on和where条件 总结: 1.inner join方式关联 on条件(无论是对主表字段的限制还是对关联表字段的限制&#…

Python实现PSO粒子群优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一…

代码随想录算法训练营 个人总结

训练营周期:2023/5/10 - 7/8,共计60天 LeetCode记录: 参加训练营之前,就有想刷LeetCode的想法,一方便没有头绪地不知道按什么顺序刷题,另一方面也没有找到很好的讲解材料,都是自己看LeetCode页面…

瑞芯微 RK356x 基于Android11移植usb接口rtl8723du wifi和蓝牙一体化

开发环境 平台: 瑞芯微RK356x 操作系统:Android11 WiFi、蓝牙芯片:RTL8723DU 通讯类型:USB协议 RTL8723du介绍 Realtek RTL8723DU是一个高度集成的单片机802.11b/g/n 1T1R WLAN,和一个集成的蓝牙2.1/4.2单片机,USB 2.0多功能。…

为什么我要自己做一个周易软件

周易是中国数千年流传下来传统文化,在八字、六壬、六爻、奇门遁甲、梅花易数等预测占卜方面应用广泛。很多传统易学工作者或爱好者采用手工排盘的方式,进行相关的排盘。当然现代更多的易学人士采用各自习惯的排盘软件进行排盘,大大节省了排盘…

如何快速将文字转换为语音?三种方法分享给你!

在我们的日常工作和生活中,经常会遇到需要将文字转换为语音的需求。大多数人可能会选择手动阅读并录制,但这种方式既耗时又繁琐,效率并不高。今天,我将为大家介绍三种可以快速将文字转换为语音的方法,让我们一起来看看…

spring-注解开发bean

注解开发bean 使用Component定义bean 在配置文件中通过组建扫描加载bean 3.也可以通过不要配置文件,定义类,使用Configuration,来代替配置文件 基于注解定义bean 1.component,大部分的bean都可以通过这个来定义 1.1Controller&#xf…

剑指Offer-29-顺时针打印矩阵

剑指Offer-29题 题目描述:顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 **题解思路:**使用 模拟 的方法 定义四个边界变量表示当前要遍历的边界:上(top)、下(bottom)、左(left)、右(right)&am…

ActiveMQ详细入门教程系列

一、什么是消息中间件 两个系统或两个客户端之间进行消息传送,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。 消息中…