---
title: "JOIN 子句 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: JOIN 子句 描述 JOIN 子句用于将两个或多个表的行联接在一起，基于这些表之间的相关列进行匹配。 权限要求 执行表联接（ JOIN ）时，需要当前用户至少拥有参与 JOIN 表的 SELECT 权限。有关 OceanBase 数据库权限的详细介绍，参见 MySQL 模式下的权限分类 。 语法 table_ref…
---
切换语言

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

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

# JOIN 子句

更新时间：2026-03-26 17:02:34

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/600.sql-statement-of-mysql-mode/8100.select-of-mysql-mode/200.join-clause-of-mysql-mode.md)  

## 描述

`JOIN` 子句用于将两个或多个表的行联接在一起，基于这些表之间的相关列进行匹配。

## 权限要求

执行表联接（`JOIN`）时，需要当前用户至少拥有参与 `JOIN` 表的 `SELECT` 权限。有关 OceanBase 数据库权限的详细介绍，参见 [MySQL 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479241)。

## 语法

```sql
table_references:
    table_reference [, table_reference ...]

table_reference:
    table_factor
    | joined_table

table_factor:
    table_name [PARTITION (partition_name_list)] [sample_clause [SEED(integer)]] [[AS] table_alias_name][index_hint_list]
    | table_subquery [AS] table_alias_name
    | (table_references)

partition_name_list:
    partition_name [, partition_name ...]

sample_clause:
    SAMPLE [BLOCK] [ALL | BASE | INCR] (sample_percent)

index_hint_list:
    index_hint [, index_hint ...]

index_hint:
    {USE | FORCE | IGNORE} {KEY | INDEX} [FOR {JOIN | ORDER BY | GROUP BY}] (index_name_list)

index_list:
    index_name [, index_name ...]

table_subquery:
    (select_stmt [sample_clause [SEED(integer)]])

joined_table:
    table_reference [NATURAL] [INNER | CROSS] JOIN table_factor [join_condition]
    | table_reference outer_join_type JOIN table_factor join_condition

join_condition:
    ON expression
    | USING (join_column_list)

join_column_list:
    column_name [, column_name ...]

outer_join_type:
    [NATURAL] {LEFT | RIGHT | FULL} [OUTER]

```

## 参数解释

| 参数 | 描述 |
| --- | --- |
| table_reference | 表示表引用，可以是单个表、联接表或子查询。 |
| table_factor | 表示查询的数据源表，也可以是表子查询或者括号中的表引用。详细介绍可参见下文 [table_factor](#table_factor)。 |
| joined_table | 表示联接表。详细介绍可参见下文 [joined_table](#joined_table)。 |

### table_factor

- `table_name [PARTITION (partition_name_list)] [sample_clause [SEED(integer)]] [[AS] table_alias_name] [index_hint_list]`：指定查询的数据源表。具体如下：

     - `table_name`：指定要从中检索数据的表或视图的名称。OceanBase 数据库支持使用 DBLink 来查询其他数据库中的表（`table_name@dblink_name`），更多有关使用 DBLink 的介绍信息，参见 [通过 DBLink 访问远端数据库中的数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476721)。

      #### 说明

      该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持 DBLink 功能。
     - `PARTITION (partition_name_list)`：可选项，用来指定特定分区的查询。

           - `partition_name_list`：表示分区名称的列表。`partition_name` 表示分区名称。

      **示例如下：**

      从表 `tbl1` 中读取分区 `p0` 和 `p1` 的数据。

      ```sql
      SELECT * FROM tbl1 PARTITION(p0, p1);

      ```

      返回结果如下：

      ```shell
      +------+------+------+
      | col1 | col2 | col3 |
      +------+------+------+
      |    1 | A1   |    1 |
      +------+------+------+
      1 row in set

      ```
     - `sample_clause [SEED(integer)]`：用来指定从表中取样的规则，即扫描一部分记录。具体如下：

           - `BLOCK`：可选项，表示扫描随机数据块进行，默认为扫描随机行。
           - `ALL | BASE | INCR`：可选项，表示扫描方式。具体如下：

                   - `ALL`：表示扫描所有数据，缺省为 `ALL`。
                   - `BASE`：表示扫描基线数据。
                   - `INCR`：表示扫描增量数据。
           - `sample_percent`：表示采样比例，单位为 `%`，可以使用 `INTEGER` 或 `DECIMAL` 类型。
           - `SEED(integer)`：可选项，用来指定随机采样的种子值，取值范围为 `[0,4294967295]`，相同的采样种子值总会返回相同的结果。
     - `[AS] table_alias_name`：可选项，指定表别名。
     - `index_hint_list`：可选项，用来指定进行查询使用的索引提示列表。`index_hint` 表示索引提示，指定对查询使用的索引。具体如下：

           - `USE | FORCE | IGNORE`：

                   - `USE`：指示某项操作使用索引。
                   - `FORCE`：指示某些操作强制使用索引。
                   - `IGNORE`：是指某项操作不使用索引。
           - `KEY | INDEX`：指定查询中用于搜索和排序的索引。
           - `FOR {JOIN | ORDER BY | GROUP BY}`：可选项，指定索引进行的操作。具体如下：

                   - `FOR JOIN`：指定索引进行联接。
                   - `FOR ORDER BY`：指定索引进行排序。
                   - `FOR GROUP BY`：指定索引进行分组。
           - `index_name_list`：指定要使用的索引名称列表，可以是一个或多个索引名称。多个索引名间使用英文逗号（`,`）分隔。`index_name` 表示引用的索引名称。
 - `table_subquery [AS] table_alias_name`：指定子查询。更多有关子查询的介绍，参见 [子查询](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476554)。

  **示例如下：**

  从表 `tbl1` 中选择 `col1` 列，然后将其作为子查询命名为 `t1`，并最终选择 `t1` 中的所有列。

  ```sql
  SELECT t1.* FROM (SELECT col1 FROM tbl1) t1;

  ```

  返回结果如下：

  ```shell
  +------+
  | col1 |
  +------+
  |    1 |
  |    2 |
  |    3 |
  +------+
  3 rows in set

  ```

### joined_table

- `table_reference [NATURAL] [INNER | CROSS] JOIN table_factor [join_condition]`：表示内联接。它返回两个表中匹配行的交集。在这种联接中，如果没有匹配的行，则不会返回结果。具体如下：

     - `table_reference`：表示表引用，可以是单个表、联接表或子查询。
     - `NATURAL`：可选项，表示进行自然联接。 `NATURAL JOIN` 会自动使用相同的列进行联接。
     - `INNER | CROSS`：可选项，具体如下：

           - `INNER JOIN`：表示进行内联接。在没有指定联接条件时，`INNER JOIN` 与英文逗号（`,`）是等价的，它们都会使用指定的表产生一个笛卡尔积。更多有关内联接的介绍，参见 [INNER JOIN](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476550)。

            #### 注意

            英文逗号（`,`）作为操作符，优先级小于 `INNER JOIN`、`CROSS JOIN`、`LEFT JOIN` 等，因此如果将逗号与其他联接关键字混合使用，可能会导致 `ON` 子句的条件错误。
           - `CROSS JOIN`：OceanBase 数据库 MySQL 模式中，`CROSS JOIN` 与 `JOIN`、`INNER JOIN` 是等价的。
     - `table_factor`：表示要联接的表引用。详细介绍参见 [table_factor](#table_factor)。
     - `join_condition`：可选项，表示联接条件。具体如下：

           - `ON expression`：返回重复列的联接条件，适用于使用不同名称的列作为联接条件。可以指定任意的联接条件，不限于基于相等的条件，比如可以使用大于或者小于等条件进行联接。

            **示例如下：**

            ```sql
            SELECT *
              FROM tbl1 JOIN tbl2
                ON tbl1.col1 = tbl2.col1;

            ```

            返回结果如下：

            ```shell
            +------+------+------+------+------+------+
            | col1 | col2 | col3 | col1 | col2 | col3 |
            +------+------+------+------+------+------+
            |    1 | A1   |    1 |    1 | A1   |    1 |
            |    2 | A2   |    2 |    2 | A2   |   22 |
            |    3 | A3   |    3 |    3 | A3   |   33 |
            +------+------+------+------+------+------+
            3 rows in set

            ```
           - `USING (join_column_list)`：不返回重复列的联接条件，仅限于联接的表使用相同名称的列作为联接条件。

            **示例如下：**

            ```sql
            SELECT *
              FROM tbl1 JOIN tbl2
                USING (col1);

            ```

            返回结果如下：

            ```shell
            +------+------+------+------+------+
            | col1 | col2 | col3 | col2 | col3 |
            +------+------+------+------+------+
            |    1 | A1   |    1 | A1   |    1 |
            |    2 | A2   |    2 | A2   |   22 |
            |    3 | A3   |    3 | A3   |   33 |
            +------+------+------+------+------+
            3 rows in set

            ```
 - `table_reference outer_join_type JOIN table_factor join_condition`：表示外联接。它返回两个表中所有行的结果，无论是否有匹配。在这种联接中，如果没有匹配的行，会用 `NULL` 填充。

     - `outer_join_type`：指定外联接类型。具体如下：

           - `{LEFT | RIGHT | FULL} [OUTER] JOIN`：

                   - `LEFT [OUTER] JOIN`：表示左外联接。左表的一行未在右表中找到的时候，就在右表自动填充 `NULL`。更多有关左外联接的介绍，参见 [LEFT JOIN](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476551)。
                   - `RIGHT [OUTER] JOIN`：表示右外联接。右表的一行未在左表中找到的时候，就在左表自动填充 `NULL`。更多有关右外联接的介绍，参见 [RIGHT JOIN](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476552)。
                   - `FULL [OUTER] JOIN`：表示全外联接。左表或者右表找不匹配行的时候都会自动填充 `NULL`。更多有关全外联接的介绍，参见 [FULL JOIN](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476553)。
     - `join_condition`：表示联接条件。

  **示例如下：**

  从表 `tbl1` 中选择所有列，并将其与表 `tbl2` 中的数据进行左联接，联接条件为 `tbl1.col1 = tbl2.col1`，同时使用条件 `tbl1.col1 > 2` 来过滤出满足该条件的数据。

  ```sql
  SELECT *
    FROM tbl1 LEFT JOIN tbl2
      ON tbl1.col1 = tbl2.col1
        AND tbl1.col1 > 2;

  ```

  返回结果如下：

  ```shell
  +------+------+------+------+------+------+
  | col1 | col2 | col3 | col1 | col2 | col3 |
  +------+------+------+------+------+------+
  |    1 | A1   |    1 | NULL | NULL | NULL |
  |    2 | A2   |    2 | NULL | NULL | NULL |
  |    3 | A3   |    3 |    3 | A3   |   33 |
  +------+------+------+------+------+------+
  3 rows in set

  ```

## 相关文档

- [SELECT](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004480787)
 - [子查询](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479502)
 - [联接](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479503)

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