---
title: 编组
description: FULL JOIN 全联接（FULL JOIN）表示全外联接，使用该语句可以返回所有联接中的所有行，不论他们是否匹配。 背景信息 外联接（OUTER JOIN）是使用比较运算符对两个表中的数据进行比较，联接结果不仅包含符合联接条件的行，同时也包含不符合条件的行。 外联接包括全联接（FULL JOIN）、左联接（LEF…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*qbZXRo_94ZEAAAAAAAAAAAAADiGDAQ/original) OB Cloud 云数据库

# FULL JOIN

更新时间：2026-06-05 10:37:01

全联接（FULL JOIN）表示全外联接，使用该语句可以返回所有联接中的所有行，不论他们是否匹配。

## 背景信息

外联接（OUTER JOIN）是使用比较运算符对两个表中的数据进行比较，联接结果不仅包含符合联接条件的行，同时也包含不符合条件的行。

外联接包括全联接（FULL JOIN）、左联接（LEFT JOIN）和右联接（RIGHT JOIN）。外联接返回满足联接条件的所有行，同时从一个表返回没有使用的行，在另一个表相应位置填充 `NULL`。

本文主要提供全联接的示例指导，左联接相关示例请参见 [左联接](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000000057891)，右联接相关示例请参见 [右联接](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000000057892)。

## FULL JOIN 语法

外联接语句中一般包括左表和右表，出现在 `JOIN` 子句最左边的为左表，出现在 `JOIN` 子句最右边的为右表。

FULL JOIN 的语法格式如下：

```sql
SELECT select_list FROM table_name1 FULL JOIN table_name2 ON join_condition
[ WHERE query_condition ]
[ ORDER BY column_list ];

```

其中，`table_name1` 为左表，`table_name2` 为右表。

## 示例

创建示例表并插入适当数据。

```sql
obclient [SYS]> CREATE TABLE tbl_a(id NUMBER NOT NULL PRIMARY KEY, name VARCHAR2(50));
Query OK, 0 rows affected

obclient [SYS]> CREATE TABLE tbl_b(num NUMBER NOT NULL PRIMARY KEY, value NUMBER);
Query OK, 0 rows affected

obclient [SYS]> INSERT INTO tbl_a VALUES(1,'ab'),(2,'cd'),(3,'ef'),(4,'gh');
Query OK, 6 rows affected
Records: 6  Duplicates: 0  Warnings: 0

obclient [SYS]> INSERT INTO tbl_b VALUES(1,1001),(3,1003),(5,1005);
Query OK, 4 rows affected
Records: 4  Duplicates: 0  Warnings: 0

```

### 简单全联接查询

使用全联接查询时，左表或右表中的行找不到匹配的行时，系统都会自动填充 `NULL`。

示例 1：将表 `tbl_a` 和表 `tbl_b` 执行全联接查询，并获取返回结果。

```sql
obclient [SYS]> SELECT * FROM tbl_a;
+----+------+
| ID | NAME |
+----+------+
|  1 | ab   |
|  2 | cd   |
|  3 | ef   |
|  4 | gh   |
+----+------+
4 rows in set

obclient [SYS]> SELECT * FROM tbl_b;
+-----+-------+
| NUM | VALUE |
+-----+-------+
|   1 |  1001 |
|   3 |  1003 |
|   5 |  1005 |
+-----+-------+
3 rows in set

obclient [SYS]> SELECT * FROM tbl_a FULL JOIN tbl_b ON tbl_a.id=tbl_b.num;
+------+------+--------+-------+
| ID   | NAME |   NUM  | VALUE |
+------+------+--------+-------+
|    1 | ab   |      1 |  1001 |
|    2 | cd   |   NULL |  NULL |
|    3 | ef   |      3 |  1003 |
|    4 | gh   |   NULL |  NULL |
| NULL | NULL |      5 |  1005 |
+------+------+--------+-------+
5 rows in set

```

可以看到，表 `tbl_a` 中没有值为 `5` 的行，返回结果中其行记录被填充为 `NULL`，而表 `tbl_b` 中没有值为 `2、4` 的行，返回结果中这 2 行被填充为 `NULL`。

### 全联接和 WHERE 子句联合使用

您可以使用全联接获取联接结果，再使用 `WHERE` 子句对联接结果进行过滤。

示例 2：将表 `tbl_a` 和表 `tbl_b` 执行全联接查询后，返回表 `tbl_b` 中 `value=1003` 的数据。

obclient [SYS]> SELECT * FROM tbl_a FULL JOIN tbl_b ON tbl_a.id=tbl_b.num WHERE tbl_b.value=1003;
+----+------+-----+-------+
| ID | NAME | NUM | VALUE |
+----+------+-----+-------+
|  3 | ef   |   3 |  1003 |
+----+------+-----+-------+
1 row in set

```

## 相关文档

- [INNER JOIN](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000000057889)
 - [LEFT JOIN](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000000057891)
 - [RIGHT JOIN](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000000057892)

 上一篇 下一篇 ![有帮助](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) 咨询热线
