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 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
mysql优化
Apr 06 MySQL
MySQL表字段时间设置默认值
May 13 MySQL
MySQL注入基础练习
May 30 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
MySQL数据库查询进阶之多表查询详解
Apr 08 MySQL
详解Mysq MVCC多版本的并发控制
Apr 29 MySQL
mysql5.5中文乱码问题解决的有用方法
May 30 MySQL
MySQL串行化隔离级别(间隙锁实现)
Jun 16 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 MySQL
MySQL池化框架学习接池自定义
Jul 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
浅谈PHP 闭包特性在实际应用中的问题
2009/10/30 PHP
Laravel find in set排序实例
2019/10/09 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
Python中的列表知识点汇总
2015/04/14 Python
Python 爬虫图片简单实现
2017/06/01 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
德国团购网站:Groupon德国
2018/03/13 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
综合办公室个人的自我评价
2013/12/22 职场文书
酒店节能减排方案
2014/05/26 职场文书
企业安全标语
2014/06/07 职场文书
长城的导游词
2015/01/30 职场文书
商务邀请函
2015/01/30 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技