• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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实现差集(Minus)和交集(Intersect)测试报告
    • MySQL 查询结果取交集的实现方法
    • java8 集合求差集、并集、交集的实例
    上一篇:Mysql 如何查询时间段交集
    下一篇:安装配置mysql及Navicat prenium的详细流程
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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