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之DML语言
Apr 05 MySQL
MySQL 表空间碎片的概念及相关问题解决
May 07 MySQL
MySQL 存储过程的优缺点分析
May 20 MySQL
MYSQL 无法识别中文的永久解决方法
Jun 03 MySQL
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 MySQL
MySQL事务的隔离级别详情
Jul 15 MySQL
MySQL 原理与优化之Update 优化
Aug 14 MySQL
DQL数据查询语句使用示例
Dec 24 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
如何选购合适的收音机
2021/03/01 无线电
透析PHP的配置文件php.ini
2006/10/09 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
php创建无限级树型菜单
2015/11/05 PHP
3种php生成唯一id的方法
2015/11/23 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
Python ljust rjust center输出
2008/09/06 Python
python中as用法实例分析
2015/04/30 Python
在Django中同时使用多个配置文件的方法
2015/07/22 Python
深入理解Django中内置的用户认证
2017/10/06 Python
django项目搭建与Session使用详解
2018/10/10 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
对python中的装包与解包实例详解
2019/08/24 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
世嘉游戏英国官方商店:SEGA Shop UK
2019/09/20 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
优秀的毕业生的自我评价
2013/12/12 职场文书
自我评价是什么
2014/01/04 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
运输公司工作总结
2015/08/11 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
php解析非标准json、非规范json的方式实例
2022/05/10 PHP