SQL中Union和Union All

  工作中,看到大佬写的一段SQL,查询了五个表中的数据,最后求某个收入的总和,其中使用了Union All,因此在这里记录一下我从中学到的东西

  先上语法

  Union:   [ Select语句1 ]

                  Union

        [ Select语句2 ]

                  Union

                  ...

Union All:   [ Select语句1 ]

                     Union All

                     [ Select语句2 ]

                     Union All

                     ... 

  Union 和 Union All  都是用来将多个SELECT语句查询出的结果集进行合并,得到的是一个临时表,要对这个临时表进行操作,需要起别名

  要注意的是,使用这两个操作符的时候,多个查询语句查出来的结果集应具有相同的列数,列的顺序也必须相同(这里,如果数据库表中的字段名不一致,可以对列起别名,使要合并的结果集的列名一致),同时列的数据类型也要相同

  Union是讲SELECT语句查出来的结果集合并,并且将其中重复的值去除掉,只显示不同的值,如果要显示重复的值,就需要使用Union All

  也就是说,Union会对查询出来的结果集进行去除重复值的操作,并且会按照字段的顺序进行排序,而Union All会将结果集直接全部显示且不会进行排序,这也就导致了Union All 的效率要比Union 好很多

  使用Union 操作符时,子句中不可以使用order by,使用后执行会报错,如果逻辑上必须对查询语句进行排序,那么可以在SELECT查询语句中使用子查询来进行order by排序

  所以,一般不要求去重的时候,合并结果集选择Union All 比较好

2019-02-12  修改

  之前写到使用Union操作符时,子句不可以使用order by,这是不严谨的,应该是Union操作符之前的子句不可以使用order by

  

  order by子句在Union操作符之后,可以正常查出数据,并且是按照order by的排序方式展示数据

  

posted @   冬天从来不怕冷  阅读(285)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
点击右上角即可分享
微信分享提示