zoukankan      html  css  js  c++  java
  • PostgreSQLの交-并-差集(INTERSECT、UNION、EXCEPT)

    PostgreSQLの交-并-差集(INTERSECT、UNION/UNION ALL、EXCEPT)

    INTERSECT用于求交集,UNION/UNION ALL用于求并集,EXCEPT用于求差集。

    用法如下:

    query1 INTERSECT query2

    query1 UNION query2 

    query1 EXCEPT query2

    其中query1和query2的SELECT子句中字段个数必须相同,且对应的数据类型必须相同(如果int和bigint结果取bigint,varchar(5)和varchar(10)结果取varchar(10)),字段名可以不同,但是最终结果会以第一个SELECT子句中字段名称返回。

    1.造数据

    create table tbl_test1(
     a int,
     b varchar(10),
     c varchar(5)
    );
    
    create table tbl_test2(
     e int,
     f varchar(10),
     g varchar(32)
    );
    
    insert into tbl_test1(a,b,c) values (1,'HA','12'),(2,'ha','543');
    
    insert into tbl_test2(e,f,g) values (1,'HA','dh'),(3,'hk','76sskjhk');

    2.INTERSECT

    两个查询使用INTERSECT求交集的结果使用图片表示如下:

    示例1.

    select a,b from tbl_test1 intersect select e,f from tbl_test2 ;

    3.UNION / UNION ALL

    两个查询使用UNION的结果使用图片表示如下:

    UNION默认会去重,即重复数据只会返回一行

    UNION ALL会保留重复数据,返回所有行。

    示例1.

    select a,b from tbl_test1 union select e,f from tbl_test2 ;
     

    示例2.

     select a,b from tbl_test1 union all select e,f from tbl_test2 ;

    示例3.

     select a,c from tbl_test1 union all select e,g from tbl_test2 ;

    4.EXCEPT

    两个查询使用EXCEPT(A EXCEPT B)求差集的结果:

    示例1.

    select a,b from tbl_test1 except select e,f from tbl_test2 ;

    作者: BORS

  • 相关阅读:
    mysql系列:加深对脏读、脏写、可重复读、幻读的理解
    PHP命令空间namespace及use的用法实践总结
    欲望与自制力
    如何被动不费太大力气的提升自己
    经常用到的常识
    Html单选按钮自定义样式
    连连看算法实现 —— 分治实现
    ctime,atime,mtime
    C++实现二叉搜索树的插入,删除
    进程调度算法总结
  • 原文地址:https://www.cnblogs.com/bors/p/postgresql_intersect_union_except.html
Copyright © 2011-2022 走看看