MySQL 8.0中的INTERSECT和EXCEPT

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 随着MySQL最新版本(8.0.31)的推出,MySQL增加了对SQL标准INTERSECT和EXCEPT表运算符的支持。让我们看看如何使用它们,我们将使用下表

随着MySQL最新版本(8.0.31)的推出,MySQL增加了对SQL标准INTERSECT和EXCEPT表运算符的支持。让我们看看如何使用它们,我们将使用下表:





CREATE TABLE `new` (  `id` int NOT NULL AUTO_INCREMENT,  `name` varchar(20) DEFAULT NULL,  `tacos` int DEFAULT NULL,  `sushis` int DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB


我们为团队会议准备了甜点,包括:玉米饼(tacos)和寿司(sushis),每条记录代表一个团队成员选择甜点的信息:




select * from new;+----+-------------+-------+--------+| id | name        | tacos | sushis |+----+-------------+-------+--------+|  1 | Kenny       |  NULL |     10 ||  2 | Miguel      |     5 |      0 ||  3 | lefred      |     4 |      5 ||  4 | Kajiyamasan |  NULL |     10 ||  5 | Scott       |    10 |   NULL ||  6 | Lenka       |  NULL |   NULL |+----+-------------+-------+--------+


01

INTERSECT


INTERSECT输出多个SELECT语句查询结果中的共有行。INTERSECT运算符是ANSI/ISO SQL标准的一部分(ISO/IEC 9075-2:2016(E))。我们运行两个查询,第一个会列出团队成员选择玉米饼的所有记录,第二个会返回团队成员选择寿司的所有记录。这两个单独的查询是:



(query 1) select * from new where tacos>0;(query 2) select * from new where sushis>0;

INTERSECT的插图


这两个结果中唯一共同存在的记录是id=3的记录。让我们使用INTERSECT来确认:





select * from new where tacos > 0 intersect select * from new where sushis > 0;+----+--------+-------+--------+| id | name   | tacos | sushis |+----+--------+-------+--------+|  3 | lefred |     4 |      5 |+----+--------+-------+--------+

很好,但在以前版本的MySQL上,此类查询的结果应该是:





ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'intersect select * from new where sushis > 0' at line 1


02

EXCEPT


EXCEPT输出在第一个SELECT语句结果中存在但不在第二个SELECT语句结果中的行。让我们找出所有只使用EXCEPT吃玉米饼的团队成员:



select * from new where tacos > 0 except select * from new where sushis > 0;+----+--------+-------+--------+| id | name   | tacos | sushis |+----+--------+-------+--------+|  2 | Miguel |     5 |      0 ||  5 | Scott  |    10 |   NULL |+----+--------+-------+--------+

EXCEPT的插图

如果我们想反过来,让所有只吃寿司的人,我们就会像这样反转查询顺序:





select * from new where sushis > 0 except select * from new where tacos > 0;+----+-------------+-------+--------+| id | name        | tacos | sushis |+----+-------------+-------+--------+|  1 | Kenny       |  NULL |     10 ||  4 | Kajiyamasan |  NULL |     10 |+----+-------------+-------+--------+


03

结论


MySQL 8.0.31延续了8.0已有的功能,包括对SQL标准的支持,如窗口函数、通用表表达式、后派生表、JSON_TABLES、JSON_VALUE、...享受MySQL!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
Linux Docker 异构计算
ModelScope问题之下载了官方镜像 但是启动不了如何解决
ModelScope镜像是指用于在ModelScope平台上创建和管理的容器镜像,这些镜像包含用于模型训练和推理的环境和依赖;本合集将说明如何使用ModelScope镜像以及管理镜像的技巧和注意事项。
377 0
|
druid Java 关系型数据库
【Java】Springboot整合多数据源配置
【Java】Springboot整合多数据源配置
1286 0
|
11月前
|
安全 网络协议 网络安全
【Azure 环境】从网络包中分析出TLS加密套件信息
An TLS 1.2 connection request was received from a remote client application, but non of the cipher suites supported by the client application are supported by the server. The connection request has failed. 从远程客户端应用程序收到 TLS 1.2 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。连接请求失败。
287 2
|
10月前
|
JSON API 开发者
京东店铺所有商品数据接口(JD.item_search_shop)丨京东API接口指南
JD.item_search_shop 是京东开放平台提供的接口,用于获取店铺所有商品数据。请求方法为 GET,主要参数包括 shopId(必填)、page、pageSize 和 sortType。开发者需先注册并获取 API 密钥,确定目标店铺 ID 后构建请求。响应为 JSON 格式,适用于电商应用、价格比较和市场分析等场景。
|
Windows
Windows 映射网络驱动器及删除-此网格连接不存在
Windows 映射网络驱动器及删除-此网格连接不存在
1150 0
|
数据采集 安全 机器人
代理ip匿名原理及那些行业需要代理ip
代理ip匿名原理及那些行业需要代理ip
183 0
|
XML Java Android开发
安卓开发新趋势:Jetpack Compose的兴起与应用
【5月更文挑战第25天】随着移动开发技术的不断演进,安卓平台的创新也在持续推进。近年来,一个名为Jetpack Compose的新工具集引起了开发者社区的广泛关注。本文将深入探讨Jetpack Compose的核心概念、优势以及它对现有安卓开发模式的影响,并分析其在实际项目中的应用潜力。
|
图形学 开发者
U3D小游戏开发实战:构建趣味互动体验的全面指南
【7月更文第13天】Unity 3D(U3D)作为业界领先的跨平台游戏开发引擎,以其强大的功能和灵活性,成为无数开发者打造创意小游戏的理想选择。本文将深入探讨如何利用U3D构建一款既有趣又互动的小游戏项目,从概念设计到实现细节,涵盖基础设置、核心逻辑编码、以及优化技巧,旨在为开发者提供一套实战性极强的开发流程指南。
699 0
|
弹性计算 负载均衡 网络协议
slb关联监听规则
SLB的监听规则配置涉及监听协议与端口选择,如HTTP/HTTPS的80/443端口;绑定后端服务器组,按轮询、最少连接数等策略分发请求;设定健康检查以确保仅转发给健康实例;设置转发策略,如URL路径、域名路由或重定向;HTTPS监听需配置SSL证书。通过这些规则,SLB能高效均衡流量,提升服务的高可用性和可扩展性。在华为云或阿里云等平台,用户需完成这些步骤来配置SLB。
229 1
|
机器学习/深度学习 人工智能 TensorFlow
生成完美口型同步的 AI 数字人视频
在当今数字媒体和人工智能技术的推动下,生成完美口型同步的AI数字人视频成为备受关注的研究领域。本研究旨在开发一种技术,能够实现生成完美口型同步的AI数字人视频,使虚拟人物的口型与语音内容完美匹配。采用了深度学习方法,结合了语音识别、面部运动生成和视频合成技术,以实现这一目标。通过语音识别模型将输入的文本转换为音频波形,利用面部运动生成模型根据音频波形生成对应的面部动作序列,这些动作序列可以准确地反映出发音的口型和面部表情,最后生成口型同步的AI数字人视频。这项技术具有广泛的应用前景,可用于虚拟主持人、教育视频、学习平台等领域,提升视频内容的真实感和沟通效果。
1009 0