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 相关文章推荐
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
MySQL查询学习之基础查询操作
May 08 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
Jun 26 MySQL
mysql优化之query_cache_limit参数说明
Jul 01 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
教你使用VS Code的MySQL扩展管理数据库的方法
Jan 22 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
Mar 13 MySQL
sql查询语句之平均分、最高最低分及排序语句
May 30 MySQL
MySQL数据库之存储过程 procedure
Jun 16 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 whois查询API制作方法
2011/06/23 PHP
php截取字符串函数分享
2015/02/02 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
将查询条件的input、select清空
2014/01/14 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
纯JS实现轮播图
2017/02/22 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
2018/11/06 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
浅析Python中的for 循环
2016/06/09 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python制作填词游戏步骤详解
2019/05/05 Python
详解Python中的测试工具
2019/06/09 Python
简单了解python PEP的一些知识
2019/07/13 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
优秀员工自荐信范文
2013/10/05 职场文书
给全校老师的建议书
2014/03/13 职场文书
征婚广告词
2014/03/17 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
学校捐书活动总结
2015/05/08 职场文书
航班延误投诉信
2015/07/02 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS