深入理解 SQL UNION 运算符及其应用场景

SQL UNION运算符

SQL UNION运算符用于组合两个或多个SELECT语句的结果集。

  • 每个UNION中的SELECT语句必须具有相同数量的列。
  • 列的数据类型也必须相似。
  • 每个SELECT语句中的列也必须按照相同的顺序排列。

UNION语法

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

UNION ALL语法
UNION运算符默认仅选择不同的值。为了允许重复的值,请使用UNION ALL

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

注意:结果集中的列名通常等于第一个*SELECT*语句中的列名。

演示数据库

在本教程中,我们将使用著名的Northwind示例数据库。

Customers表部分选择:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico

Suppliers表部分选择:

SupplierIDSupplierNameContactNameAddressCityPostalCodeCountry
1Exotic LiquidCharlotte Cooper49 Gilbert St.LondonEC1 4SDUK
2New Orleans Cajun DelightsShelley BurkeP.O. Box 78934New Orleans70117USA
3Grandma Kelly’s HomesteadRegina Murphy707 Oxford Rd.Ann Arbor48104USA

SQL UNION示例

以下SQL语句从“Customers”和“Suppliers”表中返回城市(仅不同的值):

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;

注意:如果一些客户或供应商具有相同的城市,每个城市将只列出一次,因为*UNION仅选择不同的值。使用UNION ALL*也选择重复的值!

SQL UNION ALL示例

以下SQL语句从“Customers”和“Suppliers”表中返回城市(还包括重复的值):

SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;

带有WHERE的SQL UNION

以下SQL语句从“Customers”和“Suppliers”表中返回德国的城市(仅不同的值):

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

带有WHERE的SQL UNION ALL

以下SQL语句从“Customers”和“Suppliers”表中返回德国的城市(还包括重复的值):

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

另一个UNION示例

以下SQL语句列出了所有客户和供应商:

SELECT 'Customer' AS Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;

请注意上面的AS Type - 它是一个别名。SQL别名用于给表或列一个临时的名称。别名仅在查询的持续时间内存在。因此,这里我们创建了一个名为“Type”的临时列,其中列出了联系人是“Customer”还是“Supplier”。

SQL GROUP BY语句

GROUP BY语句将具有相同值的行分组为摘要行,通常与聚合函数一起使用,以根据一个或多个列对结果集进行分组。

GROUP BY语法

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);

演示数据库

以下是Northwind示例数据库中“Customers”表的一部分选择:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

SQL GROUP BY示例

以下SQL语句列出了每个国家的客户数量:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;

以下SQL语句列出了每个国家的客户数量,按高到低排序:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;

演示数据库

以下是Northwind示例数据库中“Orders”表的一部分选择:

OrderIDCustomerIDEmployeeIDOrderDateShipperID
102489051996-07-043
102498161996-07-051
102503441996-07-082

以及“Shippers”表的一部分选择:

ShipperIDShipperName
1Speedy Express
2United Package
3Federal Shipping

带有JOIN的GROUP BY示例

以下SQL语句列出了每个承运人发送的订单数量:

SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName;

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

你真的懂人工智能吗?AI真的只是能陪你聊天而已吗?

提到AI这个词语,相信大家并不陌生,尤其是前段时间爆火的chatgpt,让我们发现似乎AI已经渗透到我们生活的方方面面了,但是你确定你真的了解AI这个事物吗?它真的只是一个简简单单的人工智能吗?恐怕不止如此。那…

Python解释器下载和安装

什么是python解释器 一款用于执行python代码的应用程序 如何下载python解释器 下载网址:Download Python | Python.org 安装步骤: 双击下载下来的安装包测试

【2023传智杯】第六届传智杯程序设计挑战赛AB组-DEF题解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言更新进度记录二.比赛题目(AB俩组)D题题目-abbE题题目 -kotori和…

Postgresql数据库运维统计信息

如果需要使用以下运维信息,需要如下几步 修改postgresql.conf文件 #shared_preload_libraries # (change requires restart)shared_preload_libraries pg_stat_statements重启数据库创建扩展 CREATE EXTENSION IF NOT EXISTS pg_stat_statements;1. 统计信息…

记录:Unity脚本的编写7.0

目录 连接数据库编写脚本查看效果查增删 有段时间没有更新了,现在有点空,就继续写一下unity的脚本,这次就来写一下关于unity连接数据库的内容 连接数据库 无论是什么语言与应用场景,总有一项东西是绕不开的,那就是数据…

数据库应用:Ubuntu 20.04 安装MongoDB

目录 一、理论 1.MongoDB 二、实验 1.Ubuntu 20.04 安装MongoDB 三、问题 1.Ubuntu Linux的apt 包管理器更新安装软件报错 2.Ubuntu20.04安装vim报错 3.Ubuntu20.04如何更换阿里源 4.Ubuntu22.04如何更换阿里源 一、理论 1.MongoDB (1)概念 …

MagicPipe3D地下管网三维建模数据规格

经纬管网建模系统MagicPipe3D(www.magic3d.net)本地离线参数化构建三维地下管网(含管道、接头、附属物等)模型,输出标准3DTiles、Obj等格式,支持Cesium、Unreal、Unity等引擎可视化查询。MagicPipe3D三维建…

Python之变量命名、运算符和面向对象

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

【Java Spring】SpringBoot 配置文件

1、Spring Boot配置文件的作用 配置文件的基本作用: 数据库连接信息(包括用户名和密码的设置)项目的启动端口第三方系统的调用密钥等信息用于发现和定位问题的普通日志和异常日志等 2、Spring Boot配置文件的格式 Spring Boot配置文件主要…

中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞)

中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞) WebLogic 是美国 Oracle 公司出品的一个 application server,确切的说是一个基于 JAVA EE 架构的中间件,WebLogic 是用于开发、集成、部署和管理大型分布式…

filebeat 日志收集工具

elk:filebeat日志收集工具和logstash相同。 filebeat是一个轻量级的日志收集工具,所使用的系统资源比logstash部署和启动时使用的资源要小的多。 filebeat可以运行在非Java环境。他可以代理logtash在非java环境上收集日志。 filebeat无法实现数据的过…

Python编程进阶:掌握描述符与装饰器的神奇妙用

更多资料获取 📚 个人网站:ipengtao.com Python 是一种多范式编程语言,具有灵活的特性,其中可调用实例、嵌套函数、描述符和装饰器是其功能强大的特性之一。这些概念对于编写高效、优雅的代码至关重要。 可调用实例 在 Python …

leetCode 100. 相同的树 和 leetCode 101. 对称二叉树 和 110. 平衡二叉树 和 199. 二叉树的右视图

1.leetCode 100. 相同的树 C代码: class Solution { public:bool isSameTree(TreeNode* p, TreeNode* q) {if(p nullptr || q nullptr) return pq;return p->val q->val && isSameTree(p->left,q->left) && isSameTree(p->righ…

「有问必答」秒杀系统 Go并发编程实践!

有问必答 摘要 本文将介绍如何使用Go语言的并发原语来构建一个简单的高并发秒杀系统。 我们将使用Go语言的原生库和一些常见的技术手段,包括互斥锁、通道、计数器等,来解决并发访问和数据一致性的问题。 本文只是一个简单的示例,重点是Go语…

虹科方案 | 如何破解CAN与车载以太网之间数据传输和协议转换的难题?

导读:在车辆网络时代,数据传输和协议转换在通信领域中扮演着至关重要的角色。它们不仅能够实现车辆内部系统之间的互联互通,还支持车辆与外部网络进行通信,从而为驾驶者带来更智能、便捷的驾驶体验。本文将介绍CAN总线与车载以太网…

猫头虎分享已解决Bug || Environment for Full Errors and Additional Helpful Warnings

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…

多线程【第二十章】

线程简介 世间有很多工作都是可以同时完成的。例如,人体可以同时进行呼吸、血液循环、思考问题等活动;用户既可以使用计算机听歌,也可以使用它打印文件。同样,计算机完全可以将多种活动同时进行,这种思想放在 Java 中被称为并发&a…

代码块01-Java

代码块01 一、介绍二、语法三、好处举例 四、使用细节五、练习题1题2 一、介绍 代码块又称为初始化块,属于类中的成员[即是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过包围起来。 但和方法不同,没有方法名…

2023年【起重机械指挥】考试题库及起重机械指挥考试资料

题库来源:安全生产模拟考试一点通公众号小程序 2023年【起重机械指挥】考试题库及起重机械指挥考试资料,包含起重机械指挥考试题库答案和解析及起重机械指挥考试资料练习。安全生产模拟考试一点通结合国家起重机械指挥考试最新大纲及起重机械指挥考试真…

每天学习一点点之从 Control character in cookie value or attribute 异常看 Cookie 字符编码限制

文章开头,感谢 浩哥 在问题排查中的帮助。 背景 昨天,我们接到了来自其他团队的反馈,他们表示在访问我们的服务时,偶尔会遇到 HTTP 500 错误。清除 Cookie 后,服务又恢复正常。根据我们现有的异常处理机制&#xff0…