Skip to content

集合

功能描述

数据库支持的集合操作主要包括交集、并集、差集,其中交集对应的关键字为INTERSECT,并集对应的关键字为UNION,差集对应的关键字为MINUS或EXCEPT。 数据库集合操作要求集合关键字两边的表必须含有相同字段数,且两边表对应字段的数据类型必须相同。

交集

交集是取两个表查询结果的相交部分,若左右两表字段名称不一致则返回结果字段信息以左边为准。

示例

求交集

sql
SQL> CREATE TABLE mtb(id INT,col1 INT,col2 INT,name VARCHAR(10));
SQL> INSERT INTO mtb VALUES(1,10,4500,'a')(2,20,3000,'b')(3,10,4500,'c');

SQL> CREATE TABLE mtb1(id INT IDENTITY(1,1),name VARCHAR,deptno INT,sal NUMERIC(10,2));
SQL> INSERT INTO mtb1 VALUES(1,'王五',10,4500)(2,'张三',10,5000)(3,'李四',10,5500);

SQL> SELECT id,deptno,sal FROM mtb1 INTERSECT SELECT id,col1,col2 FROM mtb;

ID | DEPTNO | SAL | 
------------------------------------------------------------------------------
1 | 10 | 4500|

并集

并集是将两个查询的结果组合在一起。并集分为去重和不去重两种情况,若关键字使用UNION则表示返回去重后的数据行,若关键字使用UNION ALL则表示返回未去重的数据行,用户可依照实际情况自行选择。

示例

  • 示例1
    并集去重

    sql
    SQL> SELECT id,deptno,sal FROM mtb1 UNION SELECT id,col1,col2 FROM mtb;
    
    ID | DEPTNO | SAL | 
    ------------------------------------------------------------------------------
    1 | 10 | 4500|
    3 | 10 | 4500|
    3 | 10 | 5500|
    2 | 20 | 3000|
    2 | 10 | 5000|
  • 示例2
    并集不去重

    sql
    SQL> SELECT id,deptno,sal FROM mtb1 UNION ALL SELECT id,col1,col2 FROM mtb;
    
    ID | DEPTNO | SAL | 
    ------------------------------------------------------------------------------
    1 | 10 | 4500|
    2 | 10 | 5000|
    3 | 10 | 5500|
    1 | 10 | 4500|
    2 | 20 | 3000|
    3 | 10 | 4500|

差集

差集是取两个查询结果不相同的部分,关键字可使用MINUS或EXCEPT,其中MINUS兼容Oracle,EXCEPT兼容MySQL。

示例

求两表差集

sql
SQL> SELECT id,deptno,sal FROM mtb1 MINUS SELECT id,col1,col2 FROM mtb;

ID | DEPTNO | SAL | 
------------------------------------------------------------------------------
3 | 10 | 5500|
2 | 10 | 5000|

SQL> SELECT id,deptno,sal FROM mtb1 EXCEPT SELECT id,col1,col2 FROM mtb;

ID | DEPTNO | SAL | 
------------------------------------------------------------------------------
3 | 10 | 5500|
2 | 10 | 5000|