集合操作
在 seekdb 中,可以使用集合运算符 UNION、UNION ALL、INTERSECT 和 MINUS | EXCEPT 来组合多个查询。这些集合运算符具有相同的优先级。如果 SQL 语句包含多个集合运算符,则 seekdb 将按照从左到右的顺序对它们进行计算,除非使用括号明确指定了运算的顺序。
本文将介绍集合运算符 UNION、UNION ALL、INTERSECT 和 MINUS 的使用。
语法
select_clause_set_left
{ UNION | UNION ALL | MINUS | INTERSECT}
select_clause_set_right
更多集合查询语法的信息,请参见 UNION 子句。
参数解释:
select_clause_set_left:SELECT语句,返回用于集合计算的左集合。select_clause_set_right:SELECT语句,返回用于集合计算的 右集合。UNION:用于将两个或多个SELECT语句的结果集合并为一个集合,并去除重复的行。UNION ALL:用于将两个或多个SELECT语句的结果集合并为一个集合,不去除重复的行。INTERSECT:用于返回两个SELECT语句的结果集的交集。MINUS | EXCEPT:用于返回第一个SELECT语句的结果集中不包含在第二个SELECT语句的结果集中的行。MINUS是EXCEPT的同义词。
提示
各个集合运算符只能操作 SELECT 语句的结果集,且各个结果集的列数和数据类型必须相同。
示例
现有测试表 test_tbl1 和 test_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