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慢查询的坑
Apr 28 MySQL
MySQL Threads_running飙升与慢查询的相关问题解决
May 08 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
mysql left join快速转inner join的过程
Jun 30 MySQL
MySQL面试题讲解之如何设置Hash索引
Nov 01 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
Apr 19 MySQL
MySQL导致索引失效的几种情况
Jun 25 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
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
php格式文件打开的四种方法
2018/02/24 PHP
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
python的命名规则知识点总结
2019/10/04 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
服装设计师职业生涯规划范文
2014/02/28 职场文书
项目合作意向书模板
2014/07/29 职场文书
节能环保演讲稿
2014/08/28 职场文书
自荐信模板大全
2015/03/27 职场文书
烈士陵园观后感
2015/06/08 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
java版 简单三子棋游戏
2022/05/04 Java/Android