SQL Server 中的 JOIN:类型及示例
⚡ 智能摘要
SQL Server 中的 JOIN 操作基于相关列将两个或多个表中的行组合在一起,使用 INNER、LEFT OUTER、RIGHT OUTER 和 FULL OUTER 连接来控制结果中显示哪些匹配的行和哪些不匹配的行。

SQL Server 中的连接是什么?
可以使用 JOIN 语句从多个表中检索数据。 SQL服务器JOIN 操作基于两个或多个表中的相关列(通常是列)将其中的行合并在一起。 主键 与……匹配 外键SQL Server 中主要有四种类型的 JOIN:
- 内连接/简单连接
- 左外连接 / 左连接
- 右外连接 / 右连接
- 全外连接
下表总结了每种 JOIN 类型返回的行数:
| 连接类型 | 返回的行 |
| INNER JOIN | 仅显示两个表中连接条件匹配的行。 |
| 左外连接 | 左表中的所有行,加上右表中匹配的行(如果没有匹配项,则为 NULL)。 |
| 右外连接 | 右表中的所有行,加上左表的匹配行(如果找不到匹配项,则为 NULL)。 |
| 全外连接 | 两个表中所有行,条件不满足处用 NULL 值表示。 |
以下示例使用了两个 表学生和费用数据通过共同的入学信息列进行连接。每个部分解释一种 JOIN 类型及其语法、示例查询和结果。
INNER JOIN
这类 SQL服务器 JOIN 函数返回所有满足连接条件的表中的行。它的语法如下:
SELECT columns FROM table_1 INNER JOIN table_2 ON table_1.column = table_2.column;
我们将使用以下两个表格来说明这一点。下面的“学生”表格列出了每位学生及其录取编号:
下表记录了每个入场号码所支付的金额:
以下命令通过示例演示了 SQL Server 中的 INNER JOIN:
SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid FROM Students INNER JOIN Fee ON Students.admission = Fee.admission
该命令返回以下结果,仅显示两个表中都存在的录取人数:
我们可以知道哪些学生已经缴纳了学费。我们使用了两个表中都包含相同值的列,即录取信息列。
左外连接
这种类型的连接会返回左侧表中的所有行,以及右侧表中具有匹配值的记录。例如:
SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid FROM Students LEFT OUTER JOIN Fee ON Students.admission = Fee.admission
代码返回以下结果,keeping 即使没有缴费记录,也应向每位学生收费:
在相应的列中,没有匹配值的记录将被替换为 NULL。
右外连接
这种类型的连接返回右侧表中的所有行以及左侧表中具有匹配值的行。例如:
SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid FROM Students RIGHT OUTER JOIN Fee ON Students.admission = Fee.admission
SQL Server 中的 OUTER JOIN 语句返回以下结果:
出现上述输出的原因是,当在 admission 列上匹配时,Fee 表中的所有行均可在 Students 表中使用。
全外连接
这种类型的连接会返回两个表中的所有行,如果连接条件不成立,则返回 NULL 值。例如:
SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid FROM Students FULL OUTER JOIN Fee ON Students.admission = Fee.admission
该代码对 FULL OUTER JOIN 查询返回以下结果 SQL将两个表中的每一行合并:






