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抛出异常的几种常见解决方式
May 18 MySQL
MySQL中使用or、in与union all在查询命令下的效率对比
May 26 MySQL
MySQL删除和插入数据很慢的问题解决
Jun 03 MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 MySQL
一文了解MySQL二级索引的查询过程
Feb 24 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
一次Mysql update sql不当引起的生产故障记录
Apr 01 MySQL
解决MySQL报“too many connections“错误
Apr 19 MySQL
MySQL数据库 安全管理
May 06 MySQL
MySQL批量更新不同表中的数据
May 11 MySQL
MySQL数据库之存储过程 procedure
Jun 16 MySQL
MySQL中LAG()函数和LEAD()函数的使用
Aug 14 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 preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php页面防重复提交方法总结
2013/11/25 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
React Native 图片查看组件的方法
2018/03/01 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
python之wxPython应用实例
2014/09/28 Python
Python os模块介绍
2014/11/30 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python截取两个单词之间的内容方法
2018/12/25 Python
Python之循环结构
2019/01/15 Python
Python实现GIF图倒放
2020/07/16 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
请说出以下代码输出什么
2013/08/30 面试题
说明书格式及范文
2014/05/07 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
银行贷款收入证明
2014/10/17 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL