集合
功能描述
数据库支持的集合操作主要包括交集、并集、差集,其中交集对应的关键字为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
并集去重sqlSQL> 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
并集不去重sqlSQL> 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|