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 05 MySQL
MySQL 表空间碎片的概念及相关问题解决
May 07 MySQL
修改MySQL的默认密码的四种小方法
May 26 MySQL
MySQL中distinct和count(*)的使用方法比较
May 26 MySQL
Mysql效率优化定位较低sql的两种方式
May 26 MySQL
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
Jun 26 MySQL
MySql子查询IN的执行和优化的实现
Aug 02 MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 MySQL
MySQL数据库如何给表设置约束详解
Mar 13 MySQL
将MySQL的表数据全量导入clichhouse库中
Mar 21 MySQL
mysql sock文件存储了什么信息
Jul 15 MySQL
SQLServer常见数学函数梳理总结
Aug 05 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对现有搜索引擎的调用
2013/06/25 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
Javascript中Eval函数的使用说明
2008/10/11 Javascript
event对象的方法 兼容多浏览器
2009/06/27 Javascript
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
浅谈javascript回调函数
2014/12/07 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
python自动12306抢票软件实现代码
2018/02/24 Python
python 2.7.14安装图文教程
2018/04/08 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
Python模块future用法原理详解
2020/01/20 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
大学生应聘推荐信范文
2013/11/19 职场文书
企划主管岗位职责
2013/12/12 职场文书
超市商业计划书
2014/05/04 职场文书
企业法人任命书
2015/09/21 职场文书
赞美教师的句子
2019/09/02 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android