---
title: "JOIN 子句 - OceanBase 数据库 V4.2.0 | OceanBase 文档中心"
description: "JOIN 子句 描述 JOIN 子句用于表的联接。 数据库中的联接语句用于将数据库中的两个或多个表根据联接条件组合起来。由&quot;联接&quot;生成的集合, 可以被保存为表，或者当成表来使用。联接语句的含义是把两张表的属性通过它们的值组合在一起。 语法 table_references: table_reference [, ta…"
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

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

# JOIN 子句

更新时间：2024-08-12 17:38:50

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.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` 子句用于表的联接。

数据库中的联接语句用于将数据库中的两个或多个表根据联接条件组合起来。由"联接"生成的集合, 可以被保存为表，或者当成表来使用。联接语句的含义是把两张表的属性通过它们的值组合在一起。

## 语法

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

table_reference:
    table_factor
  | joined_table

table_factor:
    table_name [partition_option]
 [[AS] alias] [index_hint_list]
  | table_subquery [AS] alias
  | ( table_references )

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

partition_option:
    PARTITION (partition_name_list)

join_condition:
     ON expression
   | USING (join_column_list)

join_column_list:
    column_name [, column_name ...]

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

index_hint_list:
    index_hint [, index_hint ...]

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

index_list:
    index_name [, index_name ...]

```

## 参数解释

| 参数 | 描述 |
| --- | --- |
| PARTITION (partition_name_list) | 指定表的分区进行联接。 |
| NATURAL | 进行自然联接。 `NATURAL JOIN` 会自动使用相同的列进行联接。 |
| [INNER] JOIN | 进行内联接。 在没有指定联接条件时，`INNER JOIN` 与逗号（,）是等价的，它们都会使用指定的表产生一个笛卡尔积。    **注意** 逗号（,）作为操作符，优先级小于 `INNER JOIN`、`CROSS JOIN`、`LEFT JOIN` 等，因此如果将逗号与其他联接关键字混合使用，可能会导致 `ON` 子句的条件错误。 |
| CROSS JOIN | OceanBase 数据库 MySQL 模式中，`CROSS JOIN` 与 `JOIN`、`INNER JOIN` 是等价的。 |
| LEFT [OUTER] JOIN | 进行左外联接，左表的一行未在右表中找到的时候，就在右表自动填充 `NULL`。 |
| RIGHT [OUTER] JOIN | 进行右外联接，右表的一行未在左表中找到的时候，就在左表自动填充 `NULL`。 |
| FULL [OUTER] JOIN | 进行外联接，左表或者右表找不匹配行的时候都会自动填充 `NULL`。 |
| column_name | 用于连接的列名。 |
| index_hint | 进行查询是否使用指定的索引。   - `USE`：指示某项操作使用索引。 - `FORCE`：指示某些操作强制使用索引。 - `IGNORE`：是指某项操作不使用索引。 - `FOR JOIN`：指定索引进行连接。 - `FOR ORDER BY`：指定索引进行排序。 - `FOR GROUP BY`：指定索引进行分组。 |
| ON expression | 返回重复列的联接条件，适用于使用不同名称的列作为联接条件。 |
| USING (join_column_list) | 不返回重复列的联接条件，仅限于联接的表使用相同名称的列作为联接条件。 |

## 示例

以如下表 `a` 与表 `b` 为例。

![Join](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/1610958261/p303134.png)

- 对表 `a` 与表 `b` 进行内联接。

  ```sql
  obclient> SELECT * FROM a JOIN b ON a.ID=b.ID;
  +------+------+------+------+
  | id   | name | id   | num  |
  +------+------+------+------+
  |    1 | A    |    1 |  100 |
  |    3 | A    |    3 |   75 |
  +------+------+------+------+
  2 rows in set

  ```
 - 对表 `a` 与表 `b` 进行交叉联接。

  ```sql
  obclient> SELECT * FROM a CROSS JOIN b ON a.id=b.id;
  +------+------+------+------+
  | id   | name | id   | num  |
  +------+------+------+------+
  |    1 | A    |    1 |  100 |
  |    3 | A    |    3 |   75 |
  +------+------+------+------+
  2 rows in set

  ```
 - 对表 `a` 与表 `b` 进行自然联接。

  ```sql
  obclient> SELECT * FROM a NATURAL JOIN b;
  Empty set

  ```
 - 对表 `a` 与表 `b` 进行左外联接。

  ```sql
  obclient> SELECT * FROM a LEFT JOIN b USING(ID);
  +------+------+------+
  | id   | name | num  |
  +------+------+------+
  |    1 | A    |  100 |
  |    2 | B    | NULL |
  |    3 | A    |   75 |
  +------+------+------+
  3 rows in set

  ```
 - 对表 `a` 与表 `b` 进行右外联接。

  ```sql
  obclient> SELECT * FROM a RIGHT JOIN b USING(ID);
  +------+------+------+
  | id   | num  | name |
  +------+------+------+
  |    1 |  100 | A    |
  |    3 |   75 | A    |
  |    4 |   50 | NULL |
  +------+------+------+
  3 rows in set

  ```
 - 对表 `a` 与表 `b` 进行全联接。

  ```sql
  obclient> SELECT * FROM a FULL JOIN b USING(ID);
  +------+------+------+
  | id   | name | num  |
  +------+------+------+
  |    1 | A    |  100 |
  |    2 | B    | NULL |
  |    3 | A    |   75 |
  |    4 | NULL |   50 |
  +------+------+------+
  4 rows in set

  ```

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