Coursera 笔记

Module 06 · Bonus Module: Advanced SQL for Data Engineers

Outer Joins外联接 (Outer Join)

Coursera ↗

欢迎观看本视频,了解外联接 (Outer Join)。

看完本视频后,您将能够:

  • 描述左外联接 (Left Outer Join)、右外联接 (Right Outer Join) 和全外联接 (Full Outer Join)。
  • 解释何时使用每种类型的外联接。
  • 描述 OUTER JOIN 语句的语法。

外联接的定义与类型

外联接与内联接相似,都会返回两个表中在联接列中具有匹配值的行。但与内联接不同的是,外联接还会返回表中不具有匹配项的行。

SQL 提供了三种类型的外联接:

  1. 左外联接 (LEFT OUTER JOIN)
  2. 右外联接 (RIGHT OUTER JOIN)
  3. 全外联接 (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 值。

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 表中没有匹配项——这本书的借阅者是未知的。

结论回顾

在本视频中,您学到了:

  • 您可以使用多种外联接变体来优化结果集。
  • 左外联接返回左表中的所有行,以及右表中内联接会返回的匹配行,加上左表中没有匹配项的所有行。
  • 右外联接返回内联接会返回的所有行,以及右表中没有匹配项的所有行。
  • 全外联接返回两个表中所有匹配的行,以及两个表中所有没有匹配项的行。