基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
UNION 子句
更新时间:2023-08-01 14:14:04
描述
该语句用于对多个 SELECT 查询的结果进行 UNION、EXCEPT或 INTERSECT 操作。
语法
select_clause_set:
select_clause_set_left [ UNION | UNION ALL | MINUS | EXCEPT | INTERSECT] select_clause_set_right
[sort_list_columns] [limit_clause]
参数解释
| 参数 | 描述 |
|---|---|
| select_clause_set_left | SELECT 语句,返回用于集合计算的左集合。 |
| select_clause_set_right | SELECT 语句,返回用于集合计算的右集合。 |
| sort_list_columns | 指定集合计算后的分组方式。 |
| limit_clause | 指定集合计算后返回的行数。 |
| UNION ALL | 合并两个查询的结果。 |
| UNION | 合并两个查询的结果,并去重。 |
| MINUS | EXCEPT | 从左查询结果集中去重出现在右查询中的结果,并去重。 说明 MINUS 是 EXCEPT 的同义词。 |
| INTERSECT | 保留左查询结果集中出现在右查询中的结果,并去重。 |
示例
以如下两表的数据为例:
obclient> CREATE TABLE t1 (c1 INT, c2 INT);
obclient> CREATE TABLE t2 (c1 INT, c2 INT);
obclient> INSERT INTO t1 VALUES (1, -1), (2, -2);
obclient> INSERT INTO t2 VALUES (1, 1), (2, -2), (3, 3);
查询数据集
t1∪t2的所有的记录。obclient> SELECT c1, c2 FROM t1 UNION ALL SELECT c1, c2 FROM t2; +------+------+ | c1 | c2 | +------+------+ | 1 | -1 | | 2 | -2 | | 1 | 1 | | 2 | -2 | | 3 | 3 | +------+------+ 5 rows in set查询数据集
t1∪t2的去重后的所有记录。obclient> SELECT c1, c2 FROM t1 UNION SELECT c1, c2 FROM t2; +------+------+ | c1 | c2 | +------+------+ | 1 | -1 | | 2 | -2 | | 1 | 1 | | 3 | 3 | +------+------+ 4 rows in set查询
t1与t2的交集。obclient> SELECT c1, c2 FROM t1 INTERSECT SELECT c1, c2 FROM t2; +------+------+ | c1 | c2 | +------+------+ | 2 | -2 | +------+------+ 1 row in set查询
t1与t2的差集。obclient> SELECT c1, c2 FROM t1 EXCEPT SELECT c1, c2 FROM t2; +------+------+ | c1 | c2 | +------+------+ | 1 | -1 | +------+------+ 1 row in set查询
t1和t2并集中按c2降序排序的前两行。obclient> SELECT c1, c2 FROM t1 UNION SELECT c1, c2 FROM t2 ORDER BY c2 DESC LIMIT 2; +------+------+ | c1 | c2 | +------+------+ | 3 | 3 | | 1 | 1 | +------+------+ 2 rows in set