纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

mysql获取集合的交集,差集,并集 mysql 怎样获取两个集合的交集/差集/并集

ColdFireMan   2021-06-08 我要评论
想了解mysql 怎样获取两个集合的交集/差集/并集的相关内容吗ColdFireMan在本文为您仔细讲解mysql获取集合的交集,差集,并集的相关知识和一些Code实例欢迎阅读和指正我们先划重点:mysql集合,mysql交集,mysql差集,mysql并集下面大家一起来学习吧

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号

右连接:

以表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

结果:

你们觉得结果是有问题还是没有问题呢?

交集:

通过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

结果:

差集:

差集用的还是比较多的类似于我们数学中学的交、合、并等集合的操作

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

结果:

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

结果:

以上为个人经验希望能给大家一个参考也希望大家多多支持


相关文章

猜您喜欢

  • OpenCV 模板匹配 OpenCV-Python模板匹配人眼的实例

    想了解OpenCV-Python模板匹配人眼的实例的相关内容吗一天一篇Python库在本文为您仔细讲解OpenCV 模板匹配 的相关知识和一些Code实例欢迎阅读和指正我们先划重点:OpenCV,模板匹配,OpenCV,模板匹配人眼下面大家一起来学习吧..
  • Golang异常处理 Golang中异常处理机制详解

    想了解Golang中异常处理机制详解的相关内容吗zchanglin在本文为您仔细讲解Golang异常处理的相关知识和一些Code实例欢迎阅读和指正我们先划重点:golang异常处理最佳实践,go错误处理,golang异常处理下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式