mysql 如何获取两个集合的交集/差集/并集

这篇文章主要介绍了mysql获取两个集合的交集/差集/并集操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mysql的常见场景,获取两个数据集的交集和差集

步骤

1、两个集合的结构要一致,对应的字段数,字段类型

2、将两个集合用 union all 关键字合并,这里的结果是有重复的所有集

3、将上面的所有集 group by id

4、最后 having count(id)=1,等于1的意思是只出现了一次,所以这个是差集,如果等于2,那么就是交集

代码演示

差集

下面的sql有明显的问题,不过这个只是一个示意,

从一个表中查询不需要用到交集和差集,条件可以合并在一起直接查询出来的.能明白意思就好

下面的sql的意思是找到所有非技术部的员工的id,code和name

?

1

2

3

4

5

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的员工

?

1

2

3

4

5

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可以自动去除重复的内容,得到不重复的结果集

?

1

2

3

4

5

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:

?

1

2

3

4

5

6

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:

?

1

2

3

4

5

6

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:

?

1

2

3

4

5

6

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相同的部分,是我们上面取交集的第二种方法。

?

1

2

3

4

5

6

7

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的差值,最后列出数据。

?

1

2

3

4

5

6

7

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 如何获取两个集合的交集/差集/并集

以上为个人经验,希望能给大家一个参考,也希望大家多多支持钦钦技术栈。

原文链接:https://blog.csdn.net/ColdFireMan/article/details/73284641

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/7020/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-07-31 3:31:04
下一篇 2022-07-31 3:31:15

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!