跳到主要内容

集合操作

在 seekdb 中,可以使用集合运算符 UNIONUNION ALLINTERSECTMINUS | EXCEPT 来组合多个查询。这些集合运算符具有相同的优先级。如果 SQL 语句包含多个集合运算符,则 seekdb 将按照从左到右的顺序对它们进行计算,除非使用括号明确指定了运算的顺序。

本文将介绍集合运算符 UNIONUNION ALLINTERSECTMINUS 的使用。

语法

select_clause_set_left 
{ UNION | UNION ALL | MINUS | INTERSECT}
select_clause_set_right

更多集合查询语法的信息,请参见 UNION 子句

参数解释:

  • select_clause_set_leftSELECT 语句,返回用于集合计算的左集合。
  • select_clause_set_rightSELECT 语句,返回用于集合计算的右集合。
  • UNION:用于将两个或多个 SELECT 语句的结果集合并为一个集合,并去除重复的行。
  • UNION ALL:用于将两个或多个 SELECT 语句的结果集合并为一个集合,不去除重复的行。
  • INTERSECT:用于返回两个 SELECT 语句的结果集的交集。
  • MINUS | EXCEPT:用于返回第一个 SELECT 语句的结果集中不包含在第二个 SELECT 语句的结果集中的行。MINUSEXCEPT 的同义词。
提示

各个集合运算符只能操作 SELECT 语句的结果集,且各个结果集的列数和数据类型必须相同。

示例

现有测试表 test_tbl1test_tbl2,数据如下:

 SELECT * FROM test_tbl1;
+------+------+
| id | name |
+------+------+
| 1 | A1 |
| 2 | A2 |
| 3 | A3 |
| 4 | A4 |
| 5 | A5 |
| 6 | A6 |
+------+------+
6 rows in set

SELECT * FROM test_tbl2;
+------+------+
| id | name |
+------+------+
| 1 | A1 |
| 2 | A2 |
| 3 | A3 |
| 7 | A7 |
| 8 | A8 |
| 9 | A9 |
+------+------+
6 rows in set

UNION 示例

在下面的 SQL 语句当中,使用 UNION 将两个 SELECT 语句的结果集合并为一个集合,合并的结果集合会去除重复的行。

SELECT id, name FROM test_tbl1
UNION
SELECT id, name FROM test_tbl2;

返回结果如下:

+------+------+
| id | name |
+------+------+
| 1 | A1 |
| 2 | A2 |
| 3 | A3 |
| 4 | A4 |
| 5 | A5 |
| 6 | A6 |
| 7 | A7 |
| 8 | A8 |
| 9 | A9 |
+------+------+
9 rows in set

UNION ALL 示例

在下面的 SQL 语句当中,使用 UNION ALL 将两个 SELECT 语句的结果集合并为一个集合,合并的结果集合不会去除重复的行。

SELECT id, name FROM test_tbl1
UNION ALL
SELECT id, name FROM test_tbl2;

返回结果如下:

+------+------+
| id | name |
+------+------+
| 1 | A1 |
| 2 | A2 |
| 3 | A3 |
| 4 | A4 |
| 5 | A5 |
| 6 | A6 |
| 1 | A1 |
| 2 | A2 |
| 3 | A3 |
| 7 | A7 |
| 8 | A8 |
| 9 | A9 |
+------+------+
12 rows in set

INTERSECT 示例

在下面的 SQL 语句当中,使用 INTERSECT 返回两个 SELECT 语句的结果集的交集。

SELECT id, name FROM test_tbl1
INTERSECT
SELECT id, name FROM test_tbl2;

返回结果如下:

+------+------+
| id | name |
+------+------+
| 1 | A1 |
| 2 | A2 |
| 3 | A3 |
+------+------+
3 rows in set

MINUS 示例

在下面的 SQL 语句当中,使用 MINUS 或者 EXCEPT 返回第一个 SELECT 语句的结果集中不包含在第二个 SELECT 语句的结果集中的行。

SELECT id, name FROM test_tbl1
MINUS
SELECT id, name FROM test_tbl2;

或者

SELECT id, name FROM test_tbl1
EXCEPT
SELECT id, name FROM test_tbl2;

返回结果如下:

+------+------+
| id | name |
+------+------+
| 4 | A4 |
| 5 | A5 |
| 6 | A6 |
+------+------+
3 rows in set

相关文档

UNION 子句