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 相关文章推荐
多表查询、事务、DCL
Apr 05 MySQL
多属性、多分类MySQL模式设计
Apr 05 MySQL
如何设计高效合理的MySQL查询语句
May 26 MySQL
MySQL 常见的数据表设计误区汇总
Jun 07 MySQL
浅谈MySQL之浅入深出页原理
Jun 23 MySQL
mysql定时自动备份数据库的方法步骤
Jul 07 MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 MySQL
MySQL修炼之联结与集合浅析
Oct 05 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
mysql sql常用语句大全
Jun 21 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 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
MySQL连接数超过限制的解决方法
2011/07/17 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
2010/11/02 Javascript
js 通用订单代码
2013/12/23 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
Python 读写文件的操作代码
2018/09/20 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
人力资源行政经理自我评价
2013/10/23 职场文书
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
电台实习生求职信
2014/02/25 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
Python中异常处理用法
2021/11/27 Python