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获取所有分类的前N条记录
May 07 MySQL
详解MySQL集群搭建
May 26 MySQL
正确使用MySQL update语句
May 26 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
sql注入报错之注入原理实例解析
Jun 10 MySQL
MySQL慢查询中的commit慢和binlog中慢事务的区别
Jun 16 MySQL
MySQL详细讲解变量variables的用法
Jun 21 MySQL
Mysql中mvcc各场景理解应用
Aug 05 MySQL
MySQL 原理与优化之Update 优化
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 SQL防注入代码集合
2008/04/25 PHP
PHP面向对象分析设计的经验原则
2008/09/20 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
拖动时防止选中
2017/02/03 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
python对一个数向上取整的实例方法
2020/06/18 Python
keras和tensorflow使用fit_generator 批次训练操作
2020/07/03 Python
如何一键升级Python所有包
2020/11/05 Python
日语翻译个人求职的自我评价
2013/10/14 职场文书
成人毕业生自我鉴定
2013/10/18 职场文书
酒店管理毕业生自荐信
2013/10/24 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
开票员岗位职责
2015/02/12 职场文书
电影建国大业观后感
2015/06/01 职场文书
Python如何加载模型并查看网络
2022/07/15 Python