• mysql 并集、交集、差集


    创建两个表

     
    CREATE TABLE `object_a` (
     
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
     
    `oname` varchar(50) DEFAULT NULL,
     
    `odesc` varchar(50) DEFAULT NULL,
     
    `create_time` datetime DEFAULT NULL,
     
    PRIMARY KEY (`id`)
     
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

    添加数据

    CREATE TABLE `object_b` (
     
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
     
    `oname` varchar(50) DEFAULT NULL,
     
    `odesc` varchar(50) DEFAULT NULL,
     
    `create_time` datetime DEFAULT NULL,
     
    PRIMARY KEY (`id`)
     
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

    添加数据

    查询并集(union all)

    SELECT oname,odesc FROM object_a
     
    UNION ALL
     
    SELECT oname,odesc FROM object_b

    结果如下

    查询并集(union)

    SELECT oname,odesc FROM object_a
     
    UNION
     
    SELECT oname,odesc FROM object_b

    结果如下


    PS:union自带去重

    查询交集

    SELECT a.oname,a.odesc FROM object_a a INNER JOIN object_b b ON a.oname=b.oname AND a.odesc=b.odesc

    等价于

    SELECT a.oname,a.odesc FROM object_a a INNER JOIN object_b b USING(oname,odesc)

    结果如下

     


    PS:别的数据库可以试试这种写法

    SELECT oname,odesc FROM object_a
     
    INTERSECT
     
    SELECT oname,odesc FROM object_b

    查询差集

    SELECT a.oname, a.odesc
     
    FROM
     
    object_a a
     
    LEFT JOIN object_b b
     
    ON a.oname = b.oname
     
    AND a.odesc = b.odesc
     
    WHERE b.id IS NULL

    结果如下

    PS:别的数据库可以试试这种写法

    SELECT a.oname, a.odesc FROM object_a a
     
    MINUS
     
    SELECT b.oname, b.odesc FROM object_b b
  • 相关阅读:
    android基于adb的性能测试
    mysql-3 数据表的创建、增删改查
    17.3.16---python内建函数
    17.3.15---C语言详解FILE文件操作
    17.3.15---关于GPIO控制流水灯的信息
    17.3.15---关于GPIO学习笔记
    17.3.14--对于时钟的知识,涉及到的总结
    17.3.14对于面向对象的理解
    17.3.13--pycharm2和3的常识问题
    17.3.13--python编码问题
  • 原文地址:https://www.cnblogs.com/-mrl/p/13610265.html
Copyright © 2020-2023  润新知