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

 更新时间:2021年06月08日 15:07:45   作者:ColdFireMan  
这篇文章主要介绍了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

结果:

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

相关文章

  • MySQL的InnoDB引擎入门学习教程

    MySQL的InnoDB引擎入门学习教程

    这篇文章主要介绍了MySQL的InnoDB引擎入门学习教程,对InnoDB的存储结构有一个较好的总结,需要的朋友可以参考下
    2015-11-11
  • 安装MySQL 5后无法启动(不能Start service)解决方法小结

    安装MySQL 5后无法启动(不能Start service)解决方法小结

    有时候我们在安装mysql软件时,却无法启动,或服务器安全设置以后都可能导致mysql无法运行
    2012-07-07
  • 优化MySQL数据库中的查询语句详解

    优化MySQL数据库中的查询语句详解

    这篇文章主要介绍了优化MySQL数据库中的查询语句,非常实用的经验总结,需要的朋友可以参考下
    2014-07-07
  • MySQL如何快速定位慢SQL的实战

    MySQL如何快速定位慢SQL的实战

    在项目中我们会经常遇到慢查询,当我们遇到慢查询的时候一般都要开启慢查询日志,本文主要介绍了MySQL如何快速定位慢SQL的实战,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 深入浅析Mysql联合索引最左匹配原则

    深入浅析Mysql联合索引最左匹配原则

    这篇文章主要介绍了Mysql联合索引最左匹配原则,使用联合索引的好处多多,具体内容详情大家跟随脚本之家小编一起学习吧
    2018-06-06
  • 详解关于MySQL 8.0走过的坑

    详解关于MySQL 8.0走过的坑

    这篇文章主要介绍了详解关于MySQL 8.0走过的坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • MySQL用B+树作为索引结构有什么好处

    MySQL用B+树作为索引结构有什么好处

    这篇文章主要介绍了MySQL用B+树作为索引结构有什么好处,帮助大家更好的理解和使用MySQL 索引,感兴趣的朋友可以了解下
    2021-01-01
  • 一篇文章带你入门SQL编程

    一篇文章带你入门SQL编程

    这篇文章主要为大家详细介绍了SQL编程的入门方法,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • linux下改良版本mysqldump来备份MYSQL数据库

    linux下改良版本mysqldump来备份MYSQL数据库

    我的备份脚本都是在凌晨执行的,经常在慢查询日志里面看到这样的信息:select * from table1; 之前一直很纳闷,最后才了解到原来是MYSQLDUMP搞的鬼。
    2008-07-07
  • JDBC连接的六步实例代码(与mysql连接)

    JDBC连接的六步实例代码(与mysql连接)

    这篇文章主要给大家介绍了关于JDBC连接的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05

最新评论