mysql 如何获取两个集合的交集/差集/并集


Posted in MySQL onJune 08, 2021

mysql的常见场景,获取两个数据集的交集和差集

步骤

1、两个集合的结构要一致,对应的字段数,字段类型

2、将两个集合用 UNION ALL 关键字合并,这里的结果是有重复的所有集

3、将上面的所有集 GROUP BY id

4、最后 HAVING COUNT(id)=1,等于1的意思是只出现了一次,所以这个是差集,如果等于2,那么就是交集

代码演示

差集

下面的sql有明显的问题,不过这个只是一个示意,

从一个表中查询不需要用到交集和差集,条件可以合并在一起直接查询出来的.能明白意思就好

下面的sql的意思是找到所有非技术部的员工的id,code和name

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp
    UNION ALL
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a GROUP BY a.id HAVING COUNT(a.id)=1

交集

下面的sql的意思是找到所有技术部年龄大于25的员工

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp WHERE age>25
    UNION ALL
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a GROUP BY a.id HAVING COUNT(a.id)=2

并集

下面的sql的意思是找到所有技术部的员工和年龄大于30的员工

union可以自动去除重复的内容,得到不重复的结果集

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp WHERE age>25
    UNION
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a

mysql中交集,并集,差集,左连接,右连接

学习mysql也有一个月啦,在这个月中,都是按照需求对数据表进行一些基本操作,在这个过程当中,经常使用到左连接,右连接,交集,取差集等,现在对其基本操作进行归纳总结。

数据源:

表一:

id name sex age

1 mike1男 34
1 mike2 男 23
1 mike3 女 24
2 mike1 男 46
2 mike2 男 35
2 mike3 男 42
2 mike4 男 62
3 mike1 女 45
4 mike5 男 72
5 mike4 女 23

表二:

id school

1 北京大学

2 清华大学

3 哈佛大学

7 MIT

左连接:

根据某个等值条件,对表进行连接。本实验是在id相同的情况下进行左连接

code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id

结果如下:以表1为根基,对表2进行连接,匹配相同的id号

mysql 如何获取两个集合的交集/差集/并集

右连接:

以表2为根基,通过id相同的字段对其进行右连接。

code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
right JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id

结果:

mysql 如何获取两个集合的交集/差集/并集

你们觉得结果是有问题还是没有问题呢?

交集:

通过id号相同,对表1和表2进行内连接,取相同的部分,不相同的部分省略掉。

code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
inner JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id

结果:

mysql 如何获取两个集合的交集/差集/并集

差集:

差集用的还是比较多的,类似于我们数学中学的,交、合、并等集合的操作。

code1:取表2与表1相同的部分,是我们上面取交集的第二种方法。

select a.id,a.name,a.sex,a.age,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT OUTER join
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
WHERE b.id IS NOT null

结果:

mysql 如何获取两个集合的交集/差集/并集

code2:取表1中的id在表2中的id的差值,最后列出数据。

select a.id,a.name,a.sex,a.age,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT OUTER join
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
WHERE b.id IS  null

结果:

mysql 如何获取两个集合的交集/差集/并集

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

MySQL 相关文章推荐
MySQL 角色(role)功能介绍
Apr 24 MySQL
Mysql基础知识点汇总
May 26 MySQL
MySQL中distinct和count(*)的使用方法比较
May 26 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
Mysql中where与on的区别及何时使用详析
Aug 04 MySQL
MYSQL 运算符总结
Nov 11 MySQL
MySQL图形化管理工具Navicat安装步骤
Dec 04 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
Apr 02 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 MySQL
Mysql 如何查询时间段交集
Jun 08 #MySQL
mysql中between的边界,范围说明
Jun 08 #MySQL
MySQL 百万级数据的4种查询优化方式
MySQL 全文检索的使用示例
Jun 07 #MySQL
MySQL 常见的数据表设计误区汇总
Jun 07 #MySQL
浅谈MySQL next-key lock 加锁范围
MySQL为id选择合适的数据类型
You might like
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
php中fsockopen用法实例
2015/01/05 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
python中requests小技巧
2017/05/10 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
Python检测数据类型的方法总结
2019/05/20 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
python实现文法左递归的消除方法
2020/05/22 Python
Python如何实现的二分查找算法
2020/05/27 Python
python文件排序的方法总结
2020/09/13 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
舞蹈教育学专业推荐信
2013/11/27 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
应届毕业生求职信
2014/05/26 职场文书
2014年电教工作总结
2014/12/19 职场文书
公司承诺函范文
2015/01/21 职场文书
教学督导岗位职责
2015/04/10 职场文书
表扬信范文
2015/05/04 职场文书