MySQL:集合运算符

news2024/11/10 16:01:42

集合运算符

MySQL中的 集合运算符(Set operators)主要用于结合两个或多个SELECT语句的结果集,这些结果集应该具有相同的列数和数据类型,以便能够进行比较或合并。

需要注意的是,MySQL本身并没有直接称为“Set operators”的特定术语或一组专门的运算符,而是使用了一些类似功能的SQL语句或运算符来实现集合操作,如 UNIONINTERSECTEXCEPT 以及 UNION ALL 等。

UNION 和 UNION ALL

UNION 操作符允许将两个或多个查询结果集合并为单个结果集

  • UNION DISTINCT 是 SQL 中用于合并多个查询结果集去除重复行的操作符。它将多个 SELECT 语句的结果按照列的顺序合并成一个结果集,自动去重(即使未显示地指定 DISTINCT),并将结果进行排序(默认为升序)

UNION 和 UNION ALL 的区别就在于是否会自动去重且是否自动排序

  • UNION ALL 是 SQL 中用于合并多个查询结果集的操作符。它将多个 SELECT 语句的结果按照列的顺序合并成一个结果集,并保留重复行,不会对结果集进行排序。执行速度要快于UNION。若要进行排序,可以使用 ORDER BY 子句。

语法结构:

SELECT column1, column2, ... FROM table1
UNION [DISTINCT | ALL]
SELECT column1, column2, ... FROM table2;
UNION [DISTINCT | ALL]
SELECT column1, column2, ... FROM table3;

每个SELECT语句表示要合并的结果集,每个查询的列数和数据类型必须相同,若列数不相同,需要添加NULL来补足。

缺点

  1. 查询语句太过冗长

  2. 查询的性能不太好,因为数据库引擎必须在内部执行两个单独的查询,并将结果集合并为一个查询。

UNION vs JOIN

JOIN 水平地将查询结果集结合,UNION 垂直地将查询结果结合

在这里插入图片描述

UNION 结合别名

若为查询结果的列头设置别名,需要在第一个SELECT语句中为字段设置别名:

SELECT 
    CONCAT(firstName,' ',lastName) fullname
FROM
    employees 
UNION SELECT 
    CONCAT(contactFirstName,' ',contactLastName)
FROM
    customers;

EXCEPT / MINUS

EXCEPT(MINUS) 是 SQL 中用于组合多个查询结果并返回不在第一个查询结果中的唯一行的关键字。通常与 UNIONUNION ALL 一起使用,用于执行集合间的差集操作

MySQL 8.0.31 以上的版本 支持 EXCEPT 关键字,在 MySQL低版本通常使用NOT EXISTS或LEFT JOIN…IS NULL来模拟

EXCEPT 在不同的数据库管理系统中的实现可能会有所差异。在某些数据库中,可能会使用 MINUS 关键字来执行类似的操作

SELECT column_list FROM table1    -- query1
EXCEPT | MINUS [DISTINCT | ALL]
SELECT column_list FROM table2;   -- query2

'''等价于'''
SELECT column_list FROM table1
LEFT JOIN table2 ON join_predicate
WHERE table2.column_name IS NULL;

EXCEPT/MINUS 将把 query1 的结果与 query2 的结果集进行比较,并**返回 query1 的结果集中,且没有出现在 query2 的结果集中的column。

  • query1 和 query2 中的列的顺序和数量必须相同

  • query1 和 query2 中对应列的数据类型必须相同

  • 默认情况下,EXCEPT/MINUS 会使用 DISTINCT 选项,即使省略了该关键字,它会自动去重。

  • EXCEPT/MINUS ALL 将会保留重复项

  • EXCEPT/MINUS 将会返回一个结果集,查询结果的列名来自第一个查询。如果需要改变列名,可以使用别名

  • 借助 ORDER BY 子句 EXCEPT/MINUS 结果集进行排序

INTERSECT

INTERSECT 是 SQL 中一种用于获取两个查询结果集的交集的集合操作符,即同时存在于所有 SELECT 语句结果集中的行

MySQL 在其 8.0.31 及更高版本中引入了 SQL 标准中的 INTERSECT 运算符,而在低版本中,通常使用 INNER JOINEXISTS 子句来模拟INTERSECT,即找出两个结果集的交集

SELECT column_list FROM table1    -- query1
INTERSECT [DISTINCT | ALL]
SELECT column_list FROM table2    -- query2

INTERSECT操作符比较 query1 和 query2 两个查询的结果集并返回二者公共行,不同于 UNION 将二者结合。

  • query1 和 query2 中的列的顺序和数量必须相同

  • query1 和 query2 中对应列的数据类型必须相同

  • 默认情况下,INTERSECT 会使用 DISTINCT 选项,即使省略了该关键字,它会自动去重。

  • INTERSECT ALL 将会保留重复项

  • INTERSECT 将会返回一个结果集,查询结果的列名来自第一个查询。如果需要改变列名,可以使用别名

  • 借助 ORDER BY 子句 INTERSECT 结果集进行排序

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flask目录结构路由重定向简单实例讲解——轻量级的 Python Web 框架

假设一个flask目录结构如下: my_flask_app/ │ ├── app.py ├── routes/ │ ├── __init__.py │ ├── ZhejiangProvince/ │ │ ├── __init__.py │ │ ├── la.py │ │ └── el.py │ ├── GuangdongProvince/ │ │ ├…

常见服务限流方法

一、令牌桶算法(Token Bucket) 原理其实很简单,就是设置同一时刻服务器能处理请求的最大数量,如果超过这个数据,则需要等待,或者不处理请求。相当于设置最大并发量,但是细节是,还设…

解决nginx端口转发后,获取不到真实IP问题

文章目录 1,设置nginx端口转发1.2,无法获取客户端真实IP 2,nginx配置文件增加配置,保留客户端信息2.2,可以看到真实IP信息 1,设置nginx端口转发 location /AWAPI/ {proxy_pass http://172.28.43.19:9607; …

组件化开发

1.组件化开发 组件化:一个页面可以拆分成一个个组件,每个组件有着自己独立的结构[html]、样式[css]、行为 [js]。好处:便于维护,利于复用 → 提升开发效率。组件分类:普通组件、根组件。比如:下面这个页面…

二级MySQL(十二)——分组聚合查询

首先整理常用的聚合函数: 函数名说明COUNT(*)记录数COUNT(列名)一列的记录数MAX(列名)一列的最大值 MIN(列名) 一列的最小值 SUM(列名)一列…

M12电连接器航插插座L-code

M12电连接器概述 M12电连接器是一种广泛应用于工业自动化、传感器、仪器仪表、数据通信和控制系统等领域的圆形连接器。它的核心特点在于其小巧的尺寸、强大的多信号传输能力和出色的防水性能,使其成为众多工业应用的首选。M12连接器通常具有3至12个引脚&#xff0…

redis主从复制、哨兵模式、集群

redis集群 高可用 redis集群的三种模式: 1.主从复制(奇书 3台 一主两从) 2.哨兵模式 (3台 一主两从) 3.cluster (集群 6 333) 主从复制:喝MySQL的主从复制类似,主可以写…

vite创建Vue2项目(配图详细)

参考文章:vite项目生成vue3并引入element-ui vite脚手架生成vue项目及其配置_viteconfig配置-CSDN博客 Vite 默认支持 Vue 3,但你也可以使用 Vite 来搭建 Vue 2 的项目。不过,这需要一些额外的配置,因为 Vue 2 不支持原生的 ES …

【电子通识】什么是SIM卡/eSIM?

什么是SIM卡。 1991年,世界第一张SIM卡被德国捷德公司开发,当时的SIM卡非常大,和银行IC卡一样: SIM卡的全名是“用户识别模块”(Subscriber Identity Module):这块镀金的电路芯片拥有身份识别功…

请大家监督:我要开启Python之路,首要任务最简单的搭建环境

任务说明: 如上图所示,Python稳稳第一,为何?因为Python可以做很多事情,比如:Web开发,网络爬虫,软件开发、数据分析、游戏开发,金融分析,人工智能与机器学习&a…

Java每日面试题(事务相关)(day5)

目录 什么是事务?spring事务的实现方式事务失效的8种情况 什么是事务? 事务是一个操作序列,要么全部执行成功,要么全部执行失败。事务有四个重要特性,称为 ACID 特性: Atomicity(原子性&#x…

从教学到分享,2024精选录屏工具

如果你在公司里承担会议记录的职责,那录屏这项技能你一定要学会。像录屏大师这样的工具可以帮你在远程会议中进行录屏操作,方便你后期整理会议内容。 1.福昕录屏大师 链接直达:https://www.foxitsoftware.cn/REC/ 这款录屏工具提供了多种…

自定义线程池(二)

上节回顾 在上一节当中,已经实现了一个线程池,在本节当中,我们需要添加拒绝策略。这里使用到了策略模式的设计模式,因为拒绝策略是多种的,我们需要将这个权利下放给调用者(由调用者来指定我要采取哪种策略…

代码随想录算法训练营第41天|LeetCode 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III

1. LeetCode 121. 买卖股票的最佳时机 题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 文章链接:https://programmercarl.com/0121.买卖股票的最佳时机.html#思路 视频链接:https://www.bilibili.com/…

微调基模型

该示例用的谷歌的gemma-2b-it模型 Gemma是Google的一系列轻量级、最先进的开源模型,基于用于创建Gemini模型的相同研究和技术构建。它们是文本到文本、仅解码的大型语言模型,提供英文、开源权重、预训练变体和指令调优变体。Gemma模型非常适合各种文本生…

微软蓝屏事件:网络安全与系统稳定性的深刻反思

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 写在前面 在数字化时代,软件更新已成为…

电测量数据交换DLMS∕COSEM组件第61部分:对象标识系统(OBIS)(下)

GB/T 17215.6的本部分规定了对象标识系统(OBIS)的总体结构并将测量设备中的所有常用数据项映射到其标识代码。OBIS为测量设备中的所有数据都提供唯一的标识符,不仅包括测量值,而且还包括仪表设备的配置或获取测量设备运行状态的抽象数据。 5.抽象对象(A=0) 5.1通用和服…

yolov10来了!用yolov10训练自己的数据集(原理、训练、部署、应用)

一、引言 YOLOv9还没热乎呢,YOLOv10就出来了,太卷了!太快了! 自今年2月YOLOv9发布之后, YOLO(You Only Look Once) 系列的接力棒传到了清华大学研究人员的手上。YOLOv10推出的消息引发了AI界的…

【第七天】TCP三次握手四次挥手 HTTP的keep-Alive和TCP的keepalive

TCP三次握手四次挥手 既然要了解这些,首先我们要清楚一个概念,半连接队列和全连接队列: 在TCP三次握手中,Linux内核会维护两个队列来管理连接请求。 这两个队列的存在是为了处理并发连接请求,确保服务端能够有效管理新…

设计模式17-适配模式

设计模式17-适配模式 动机定义与结构C代码推导总结应用具体应用示例 动机 在软件系统中由于应用环境的变化常常需要将一些现存的对象。放到新的环境中去应用。但是新环境要求的接口是这些现存对象所不满足的。那么这种情况下如何应对这种迁移的变化?如何既能利用现…