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
MySQL创建索引需要了解的
Apr 08 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
MySQL的安装与配置详细教程
Jun 26 MySQL
MySQL中utf8mb4排序规则示例
Aug 02 MySQL
MySQL中varchar和char类型的区别
Nov 17 MySQL
MySQL如何使备份得数据保持一致
May 02 MySQL
mysql 获取相邻数据项
May 11 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
MySQL自定义函数及触发器
Aug 05 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之第四天
2006/10/09 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
总结一些js自定义的函数
2006/08/05 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
easyui Droppable组件实现放置特效
2015/08/19 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
清除输入框内的空格
2016/12/21 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
python抓取网页图片并放到指定文件夹
2014/04/24 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
爱普生美国官网:Epson美国
2018/11/05 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
教师辞职报告范文
2014/01/20 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
医疗纠纷协议书
2014/04/16 职场文书
自我推荐信范文
2014/05/09 职场文书
2014教师年度工作总结
2014/11/10 职场文书
python中super()函数的理解与基本使用
2021/08/30 Python
浅谈MySQL函数
2021/10/05 MySQL