集合
📄字数 1.2K
👁️阅读量 加载中...
数据库支持的集合操作主要包括交集(INTERSECT
)、并集(UNION
)、差集(MINUS
或EXCEPT
),数据库集合操作要求集合关键字两边的表必须含有相同字段数,且两边表对应字段的数据类型必须相同,或可执行隐式数据类型转换。
语法格式请参见简单查询-simple_select中多查询做并集、交集与差集运算部分。
一、交集
1.1 功能描述
交集是取两个表查询结果的相交部分,若左右两表字段名称不一致则返回结果字段信息以左边为准。
1.2 示例
sql
SQL> CREATE TABLE tab_1(id INT,col1 INT,col2 INT,name VARCHAR(10));
Execute successful.
Use time:33 ms.
SQL> INSERT INTO tab_1 VALUES(1,10,4500,'a')(2,20,3000,'b')(3,10,4500,'c');
Total 3 records effected.
Use time:0 ms.
SQL> CREATE TABLE tab_2(id INT IDENTITY(1,1),name VARCHAR,deptno INT,sal NUMERIC(10,2));
Execute successful.
Use time:41 ms.
SQL> INSERT INTO tab_2 VALUES(1,'王五',10,4500)(2,'张三',10,5000)(3,'李四',10,5500);
Total 3 records effected.
Use time:1 ms.
SQL> SELECT id,deptno,sal FROM tab_2 INTERSECT SELECT id,col1,col2 FROM tab_1;
+----+--------+------+
| ID | DEPTNO | SAL |
+----+--------+------+
| 1 | 10 | 4500 |
+----+--------+------+
(1 row)
Use time:12 ms.
二、并集
2.1 功能描述
并集是将两个查询的结果组合在一起,分为去重和不去重两种情况,使用UNION
关键字表示去重,使用UNION ALL
表示不去重。
2.2 示例
sql
-- 并集去重
SQL> SELECT id,deptno,sal FROM tab_2 UNION SELECT id,col1,col2 FROM tab_1;
+----+--------+------+
| ID | DEPTNO | SAL |
+----+--------+------+
| 1 | 10 | 4500 |
| 3 | 10 | 4500 |
| 3 | 10 | 5500 |
| 2 | 20 | 3000 |
| 2 | 10 | 5000 |
+----+--------+------+
(5 rows)
Use time:9 ms.
-- 并集不去重
SQL> SELECT id,deptno,sal FROM tab_2 UNION ALL SELECT id,col1,col2 FROM tab_1;
+----+--------+------+
| ID | DEPTNO | SAL |
+----+--------+------+
| 1 | 10 | 4500 |
| 2 | 10 | 5000 |
| 3 | 10 | 5500 |
| 1 | 10 | 4500 |
| 2 | 20 | 3000 |
| 3 | 10 | 4500 |
+----+--------+------+
(6 rows)
Use time:0 ms.
三、差集
3.1 功能描述
差集是取两个查询结果不相同的部分,关键字可使用MINUS
或EXCEPT
,其中MINUS
兼容Oracle,EXCEPT
兼容MySQL。
3.2 示例
sql
SQL> SELECT id,deptno,sal FROM tab_2 MINUS SELECT id,col1,col2 FROM tab_1;
+----+--------+------+
| ID | DEPTNO | SAL |
+----+--------+------+
| 3 | 10 | 5500 |
| 2 | 10 | 5000 |
+----+--------+------+
(2 rows)
Use time:1 ms.
SQL> SELECT id,deptno,sal FROM tab_2 EXCEPT SELECT id,col1,col2 FROM tab_1;
+----+--------+------+
| ID | DEPTNO | SAL |
+----+--------+------+
| 3 | 10 | 5500 |
| 2 | 10 | 5000 |
+----+--------+------+
(2 rows)
Use time:0 ms.