左外連線

左外連線(也稱為左連線或外連線)是一個連線,可確保左表中的所有行都被表示; 如果右表中沒有匹配的行,則其對應的欄位為 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 約翰
銷售 理查德
技術 空值