Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


集合

📄字数 1.2K
👁️阅读量 加载中...

数据库支持的集合操作主要包括交集(INTERSECT)、并集(UNION)、差集(MINUSEXCEPT),数据库集合操作要求集合关键字两边的表必须含有相同字段数,且两边表对应字段的数据类型必须相同,或可执行隐式数据类型转换。

语法格式请参见简单查询-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 功能描述

差集是取两个查询结果不相同的部分,关键字可使用MINUSEXCEPT,其中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.