编辑
2025-02-16
SQLServer 应用
00
请注意,本文编写于 79 天前,最后修改于 79 天前,其中某些信息可能已经过时。

目录

内连接 (INNER JOIN)
实例数据表
SQL 查询
结果
外连接 (OUTER JOIN)
左外连接 (LEFT OUTER JOIN)
SQL 查询
结果
右外连接 (RIGHT OUTER JOIN)
SQL 查询
结果
全外连接 (FULL OUTER JOIN)
SQL 查询
结果
交叉连接 (CROSS JOIN)
SQL 查询
结果
结论

在数据库管理系统中,JOINs 是 SQL 中用于合并两个或多个表的记录的强大工具。JOINs 根据相关列之间的关系将行组合在一起。本文将详细介绍三种常见的 JOIN 类型:内连接(INNER JOIN)、外连接(OUTER JOIN,包括左外连接、右外连接和全外连接)、以及交叉连接(CROSS JOIN)。

内连接 (INNER JOIN)

内连接是最常用的 JOIN 类型,它返回两个表中匹配的行。如果在一个表中的行与另一个表中的行在指定的列上相等,则这些行将被返回。

实例数据表

假设我们有两个数据表:EmployeesDepartments

Employees 表:

EmployeeIDEmployeeNameDepartmentID
1Alice101
2Bob102
3Charlie103
4David101

表结构

SQL
CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, EmployeeName VARCHAR(50), DepartmentID INT );

测试数据

SQL
INSERT INTO Employees (EmployeeID, EmployeeName, DepartmentID) VALUES (1, 'Alice', 101), (2, 'Bob', 102), (3, 'Charlie', 103), (4, 'David', 101);

Departments 表:

DepartmentIDDepartmentName
101HR
102IT
103Sales
104Marketing

表结构

SQL
CREATE TABLE Departments ( DepartmentID INT PRIMARY KEY, DepartmentName VARCHAR(255) );

测试数据

SQL
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES (101, 'HR'), (102, 'IT'), (103, 'Sales'), (104, 'Marketing');

SQL 查询

SQL
SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

结果

EmployeeNameDepartmentName
AliceHR
BobIT
CharlieSales
DavidHR

image.png

在这个例子中,内连接返回了所有有对应部门的员工记录。

外连接 (OUTER JOIN)

外连接包括左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。外连接不仅返回匹配的行,还返回左表、右表或两个表中未匹配的行。

左外连接 (LEFT OUTER JOIN)

左外连接返回左表的所有行,即使右表中没有匹配的行。

SQL 查询

SQL
SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees LEFT OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

结果

EmployeeNameDepartmentName
AliceHR
BobIT
CharlieSales
DavidHR

image.png

在这个例子中,左外连接返回了所有员工记录和他们对应的部门名称,即使有些员工没有对应的部门也会显示。

右外连接 (RIGHT OUTER JOIN)

右外连接返回右表的所有行,即使左表中没有匹配的行。

SQL 查询

SQL
SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees RIGHT OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

结果

EmployeeNameDepartmentName
AliceHR
BobIT
CharlieSales
DavidHR
NULLMarketing

image.png

在这个例子中,右外连接返回了所有部门记录,以及如果有的话,对应的员工名称。

全外连接 (FULL OUTER JOIN)

全外连接返回左表和右表中的所有行。如果行在另一边没有匹配,则对应列将为 NULL。

SQL 查询

SQL
SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees FULL OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

结果

EmployeeNameDepartmentName
AliceHR
BobIT
CharlieSales
DavidHR
NULLMarketing

image.png

在这个例子中,全外连接返回了所有员工和所有部门的记录。

交叉连接 (CROSS JOIN)

交叉连接返回第一个表中的每一行与第二个表中的每一行的笛卡尔积。这意味着如果第一个表有 M 行,第二个表有 N 行,那么结果集将有 M x N 行。

SQL 查询

SQL
SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees CROSS JOIN Departments;

结果

EmployeeNameDepartmentName
AliceHR
AliceIT
AliceSales
AliceMarketing
BobHR
BobIT
BobSales
BobMarketing
CharlieHR
CharlieIT
CharlieSales
CharlieMarketing
DavidHR
DavidIT
DavidSales
DavidMarketing

image.png

在这个例子中,交叉连接返回了员工和部门之间所有可能的组合。

结论

JOINs 是 SQL 中的核心概念,它们使得从多个表中组合数据变得可能。根据实际需求,可以选择使用内连接、外连接或交叉连接。理解不同类型的 JOINs 如何工作,以及它们在何种情况下使用,对于任何使用 SQL 进行数据库查询的人来说都是非常重要的。

本文作者:rick

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!