---
title: "集合操作 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: "集合操作 在 OceanBase 数据库 MySQL 模式中，可以使用集合运算符 UNION 、 UNION ALL 、 INTERSECT 和 MINUS | EXCEPT 来组合多个查询。这些集合运算符具有相同的优先级。如果 SQL 语句包含多个集合运算符，则 OceanBase 数据库将按照从左到右的顺序对它们…"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.5.0

# 集合操作

更新时间：2026-02-19 19:15:52

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/300.develop/100.application-development-of-mysql-mode/500.read-data-of-mysql-mode/500.query-collection-operations-of-mysql-mode.md)  

在 OceanBase 数据库 MySQL 模式中，可以使用集合运算符 `UNION`、`UNION ALL`、`INTERSECT` 和 `MINUS | EXCEPT` 来组合多个查询。这些集合运算符具有相同的优先级。如果 SQL 语句包含多个集合运算符，则 OceanBase 数据库将按照从左到右的顺序对它们进行计算，除非使用括号明确指定了运算的顺序。

本文将介绍集合运算符 `UNION`、`UNION ALL`、`INTERSECT` 和 `MINUS` 的使用。

## 语法

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

```

更多集合查询语法的信息，请参见 [UNION 子句](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004480789)。

**参数解释：**

- `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`，数据如下：

```shell
obclient [test]> SELECT * FROM test_tbl1;
+------+------+
| id   | name |
+------+------+
|    1 | A1   |
|    2 | A2   |
|    3 | A3   |
|    4 | A4   |
|    5 | A5   |
|    6 | A6   |
+------+------+
6 rows in set

obclient [test]> 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` 语句的结果集合并为一个集合，合并的结果集合会去除重复的行。

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

```

返回结果如下：

```shell
+------+------+
| 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` 语句的结果集合并为一个集合，合并的结果集合不会去除重复的行。

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

```

返回结果如下：

```shell
+------+------+
| 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` 语句的结果集的交集。

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

```

返回结果如下：

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

```

### MINUS 示例

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

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

```

或者

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

```

返回结果如下：

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

```

## 相关文档

[UNION 子句](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004480789)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
