Module 06 · Bonus Module: Advanced SQL for Data Engineers
Outer Joins外联接 (Outer Join)
欢迎观看本视频,了解外联接 (Outer Join)。
看完本视频后,您将能够:
- 描述左外联接 (Left Outer Join)、右外联接 (Right Outer Join) 和全外联接 (Full Outer Join)。
- 解释何时使用每种类型的外联接。
- 描述 OUTER JOIN 语句的语法。
外联接的定义与类型
外联接与内联接相似,都会返回两个表中在联接列中具有匹配值的行。但与内联接不同的是,外联接还会返回表中不具有匹配项的行。
SQL 提供了三种类型的外联接:
- 左外联接 (LEFT OUTER JOIN)
- 右外联接 (RIGHT OUTER JOIN)
- 全外联接 (FULL OUTER JOIN)
1. 左外联接 (LEFT OUTER JOIN 或 LEFT JOIN)
在左外联接中,所有行都会包含在第一个表(联接谓词的左侧,即左表)中,而第二个表(右侧,即右表)中只包含匹配的行。
💡 描述:左联接匹配来自左表的所有行,并将其信息与来自右表中匹配查询条件的行相结合。
语法示例:LEFT JOIN
这是 LEFT JOIN 的 SELECT 语句语法:
SQL
SELECT Column_List
FROM Left_Table LEFT JOIN Right_Table
ON Join_Predicate;
- 示例:在
FROM子句中,Borrower表在联接运算符的左侧,因此它是左表,Loan表是右表。 - 操作:您将选择
Borrower表中的所有行,并根据查询中指定的条件(本例为 BORROWER ID 列)与Loan表的内容相结合。 - 结果集:结果集显示
Borrower表中的每个 Borrower ID 及其对应的 Loan Date。- 示例中,最后三行(例如 Peters, Li, and Wong)没有 Loan Date,因此 Loan_Date 列和
Loan表的 Borrower ID 列会显示 NULL 值。
- 示例中,最后三行(例如 Peters, Li, and Wong)没有 Loan Date,因此 Loan_Date 列和
2. 右外联接 (RIGHT OUTER JOIN 或 RIGHT JOIN)
在右外联接中,所有行都会包含在第二个表(联接谓词的右侧,即右表)中,而第一个表(左侧,即左表)中只包含匹配的行。
💡 描述:右联接匹配来自右表的所有行,并将其信息与来自左表中匹配查询条件的行相结合。
语法示例:RIGHT JOIN
这是 RIGHT JOIN 的 SELECT 语句语法:
SQL
SELECT Column_List
FROM Left_Table RIGHT JOIN Right_Table
ON Join_Predicate;
- 示例:在
FROM子句中,Loan表在联接运算符的右侧。因此,您将选择Loan表中的所有行,并根据查询中指定的条件(BORROWER ID 列)与Borrower表的内容相结合。 - 操作:您将选择
Loan表中的 Borrower_ID 和 LoanDate,以及Borrower表中 Borrower_ID 匹配的 Borrower_ID、LastName 和 Country。 - 结果集:结果集显示
Loan表中的每个 Borrower ID 及其对应的 Loan Date,其中Loan表中的 Borrower ID 存在于Borrower表中。- 未匹配行:对于最后一行,
Borrower表中没有匹配的行,因此 Borrower_ID、Lastname 和 Country 列显示 NULL 值。 - 潜在问题:这可能表明图书馆存在问题——有一本书借给了一个未知的人。
- 未匹配行:对于最后一行,
3. 全外联接 (FULL OUTER JOIN 或 FULL JOIN)
全联接返回右表和左表中的所有行。
💡 描述:全联接返回来自两个表的所有行,包括所有匹配的行和所有不匹配的行。因此,FULL JOIN 可能会返回非常大的结果集。
语法示例:FULL JOIN
这是 FULL JOIN 的 SELECT 语句语法:
SQL
SELECT Column_List
FROM Left_Table FULL JOIN Right_Table
ON Join_Predicate;
- 操作:对于 FULL JOIN,您将选择
Borrower表中的所有行和Loan表中的所有行。 - 结果集:结果集显示来自
Borrower表的所有记录,并列出Loan表中对应的数据。- 未借阅者:有三行返回 NULL 值,因为借阅者 Peters、Li 和 Wong 从未借出图书。
- 未知借阅者:最后一行返回来自
Loan表的 Borrower_ID 和 Loan_Date 值,但返回来自Borrower表的 NULL 值。在这种情况下,Borrower表中没有匹配项——这本书的借阅者是未知的。
结论回顾
在本视频中,您学到了:
- 您可以使用多种外联接变体来优化结果集。
- 左外联接返回左表中的所有行,以及右表中内联接会返回的匹配行,加上左表中没有匹配项的所有行。
- 右外联接返回内联接会返回的所有行,以及右表中没有匹配项的所有行。
- 全外联接返回两个表中所有匹配的行,以及两个表中所有没有匹配项的行。