左外连接

左外连接(也称为左连接或外连接)是一个连接,可确保左表中的所有行都被表示; 如果右表中没有匹配的行,则其对应的字段为 NULL

以下示例将选择所有部门以及在该部门中工作的员工的名字。没有员工的部门仍会在结果中返回,但员工姓名将为 NULL:

SELECT          Departments.Name, Employees.FName
FROM            Departments 
LEFT OUTER JOIN Employees 
ON              Departments.Id = Employees.DepartmentId

这将从示例数据库返回以下内容 :

Departments.Name Employees.FName
HR 詹姆士
HR 约翰
HR 乔纳森
销售 迈克尔
技术 空值

那怎么办?

FROM 子句中有两个表:

ID FName 参数 LName 电话号码 经理 ID DepartmentID 薪水 聘用日期
1 詹姆士 工匠 1234567890 空值 1 1000 2002 年 1 月 1 日
2 约翰 约翰逊 2468101214 1 1 400 23-03-2005
3 迈克尔 威廉姆斯 1357911131 1 2 600 12-05-2009
4 乔纳森 工匠 1212121212 2 1 500 24-07-2016

ID 名称
1 HR
2 销售
3 技术

首先,从两个表中创建一个笛卡尔积,给出一个中间表。
符合连接条件的记录( Departments.Id = Employees.DepartmentId )以粗体突出显示; 这些被传递到查询的下一个阶段。

由于这是 LEFT OUTER JOIN,所有记录都从连接的 LEFT 侧返回(Departments),而如果 RIGHT 侧的任何记录与连接标准不匹配,则会给出 NULL 标记。在下表中,这将返回带有 NULLTech

ID 名称 ID FName 参数 LName 电话号码 经理 ID DepartmentID 薪水 聘用日期
1 HR 1 詹姆士 工匠 1234567890 空值 1 1000 2002 年 1 月 1 日
1 HR 2 约翰 约翰逊 2468101214 1 1 400 23-03-2005
1 HR 3 迈克尔 威廉姆斯 1357911131 1 2 600 12-05-2009
1 HR 4 乔纳森 工匠 1212121212 2 1 500 24-07-2016
2 销售 1 詹姆士 工匠 1234567890 空值 1 1000 2002 年 1 月 1 日
2 销售 2 约翰 约翰逊 2468101214 1 1 400 23-03-2005
2 销售 3 迈克尔 威廉姆斯 1357911131 1 2 600 12-05-2009
2 销售 4 乔纳森 工匠 1212121212 2 1 500 24-07-2016
3 技术 1 詹姆士 工匠 1234567890 空值 1 1000 2002 年 1 月 1 日
3 技术 2 约翰 约翰逊 2468101214 1 1 400 23-03-2005
3 技术 3 迈克尔 威廉姆斯 1357911131 1 2 600 12-05-2009
3 技术 4 乔纳森 工匠 1212121212 2 1 500 24-07-2016

最后,评估 SELECT 子句中使用的每个表达式以返回我们的最终表:

Departments.Name Employees.FName
HR 詹姆士
HR 约翰
销售 理查德
技术 空值