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 Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
MySQL sql_mode修改不生效的原因及解决
May 07 MySQL
MySQL 分组查询的优化方法
May 12 MySQL
MySQL 亿级数据导入导出及迁移笔记
Jun 18 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
浅谈MySQL函数
Oct 05 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
mysql的Buffer Pool存储及原理
Apr 02 MySQL
mysql查找连续出现n次以上的数字
May 11 MySQL
MySQL数据库简介与基本操作
May 30 MySQL
mysql sock文件存储了什么信息
Jul 15 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开源建站平台小结
2010/04/22 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
ASP SQL防注入的方法
2008/12/25 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
Vue表单实例代码
2016/09/05 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
用python代码做configure文件
2014/07/20 Python
Python使用py2exe打包程序介绍
2014/11/20 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
中国梦主题教育活动总结
2014/05/05 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
学习心理学的体会
2014/11/07 职场文书
2014年销售工作总结
2014/12/01 职场文书
优秀教师申报材料
2014/12/16 职场文书
家装业务员岗位职责
2015/04/03 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
python垃圾回收机制原理分析
2022/04/13 Python