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
教你用eclipse连接mysql数据库
Apr 22 MySQL
MySQL如何构建数据表索引
May 13 MySQL
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
mysql备份策略的实现(全量备份+增量备份)
Jul 07 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
navicat 连接Ubuntu虚拟机的mysql的操作方法
Apr 02 MySQL
MySQL数据库如何查看表占用空间大小
Jun 10 MySQL
mysql查看表结构的三种方法总结
Jul 07 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/05/26 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
js中符号转意问题示例探讨
2013/08/19 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
七个很有意思的PHP函数
2014/05/12 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
python修改注册表终止360进程实例
2014/10/13 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
Python计算信息熵实例
2020/06/18 Python
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
导师就业推荐信范文
2014/05/22 职场文书
中国梦口号
2014/06/13 职场文书
家长会欢迎标语
2014/06/24 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
员工工作表现自我评价
2015/03/06 职场文书
答辩状格式范本
2015/05/22 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
详解Django的MVT设计模式
2021/04/29 Python
Java 在生活中的 10 大应用
2021/11/02 Java/Android
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
springboot入门 之profile设置方式
2022/04/04 Java/Android