

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# JOIN 子句
<a name="join-clause"></a>

SQL JOIN 子句用于根据公共字段合并两个或多个表中的数据。根据指定的联接方法，结果可能会发生变化，也可能不发生变化。当在其他表中找不到匹配项时，左外部联接和右外部联接保留某个已联接表中的值。

JOIN 类型和连接条件的组合决定了哪些行包含在最终结果集中。然后，SELECT 和 WHERE 子句控制返回哪些列以及如何筛选行。了解不同的 JOIN 类型以及如何有效使用它们是 SQL 中的一项关键技能，因为它允许你以灵活而强大的方式合并来自多个表的数据。

## 语法
<a name="join-clause-syntax"></a>

```
SELECT column1, column2, ..., columnn
FROM table1
join_type table2
ON table1.column = table2.column;
```

## 参数
<a name="join-clause-parameters"></a>

 *选择第 1 列、第 2 列、...、第 N 列*   
要包含在结果集中的列。您可以从 JOIN 中涉及的两个表中的一个或两个表中选择列。

 *来自表 1*   
JOIN 操作中的第一个（左）表。

 *[JOIN \| INNER JOIN \| 左 [外] 连接 \| 右 [外部] 联接 \| 完整 [外部] 联接] table2：*  
要执行的 JOIN 类型。JOIN 或 INNER JOIN 仅返回两个表中值匹配的行。  
LEFT [OUTER] JOIN 返回左表中的所有行，以及右表中的匹配行。  
RIGHT [OUTER] JOIN 返回右表中的所有行，以及左表中的匹配行。  
FULL [OUTER] JOIN 返回两个表中的所有行，无论是否存在匹配项。  
CROSS JOIN 创建两个表中行的笛卡尔乘积。

 *ON table 1.column = table 2.*  
连接条件，它指定如何匹配两个表中的行。连接条件可以基于一列或多列。

 *WHERE 状况：*  
一个可选子句，可用于根据指定条件进一步筛选结果集。

## 示例
<a name="Join_examples"></a>

以下示例是使用 USING 子句在两个表之间进行的联接。在这种情况下，列 listid 和 eventid 用作联接列。结果限制为 5 行。

```
select listid, listing.sellerid, eventid, listing.dateid, numtickets
from listing join sales
using (listid, eventid)
order by 1
limit 5;

listid | sellerid | eventid | dateid | numtickets
-------+----------+---------+--------+-----------
1      | 36861    | 7872    | 1850   | 10
4      | 8117     | 4337    | 1970   | 8
5      | 1616     | 8647    | 1963   | 4
5      | 1616     | 8647    | 1963   | 4
6      | 47402    | 8240    | 2053   | 18
```