SQL LEFT JOIN 操作

在本教程中,你將學習如何使用 SQL 左連線從兩個表中檢索資料。

使用左連線

一個 LEFT JOIN 語句返回左表中的所有行與從該聯接條件滿足右表中的行一起。左連線是一種外連線,這就是為什麼它也被稱為左外連線。外連線的其他變體是右連線完全連線

以下維恩圖說明了左連線的工作原理。

SQL 左連線圖

注意: 外連線是包含結果集中的行的連線,即使要連線的兩個表中的行之間可能不匹配。

為了清楚地理解這一點,讓我們看看以下 employeesdepartments 表。

Table: employees

+--------+--------------+------------+---------+
| emp_id | emp_name     | hire_date  | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |       4 |
|      2 | Tony Montana | 2002-07-15 |       1 |
|      3 | Sarah Connor | 2005-10-18 |       5 |
|      4 | Rick Deckard | 2007-01-03 |       3 |
|      5 | Martin Blank | 2008-06-24 |    NULL |
+--------+--------------+------------+---------+

Table: departments

+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
|       1 | Administration   |
|       2 | Customer Service |
|       3 | Finance          |
|       4 | Human Resources  |
|       5 | Sales            |
+---------+------------------+

現在,假設你想要檢索所有員工的 ID,姓名和僱用日期以及他們部門的名稱,無論他們是否被分配到任何部門。要獲得這種型別的結果集,我們需要應用左連線。

以下語句通過使用公共 dept_id 欄位將 employeesdepartments 表連線在一起來檢索員工的 ID,姓名,僱用日期及其部門名稱。它還包括未分配到部門的員工。 **

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_id;

提示: 在連線查詢中,左表是在 JOIN 子句中最左側出現的表,右表是最右側出現的表。

執行上面的命令後,你會得到這樣的輸出:

+--------+--------------+------------+-----------------+
| emp_id | emp_name     | hire_date  | dept_name       |
+--------+--------------+------------+-----------------+
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources |
|      2 | Tony Montana | 2002-07-15 | Administration  |
|      3 | Sarah Connor | 2005-10-18 | Sales           |
|      4 | Rick Deckard | 2007-01-03 | Finance         |
|      5 | Martin Blank | 2008-06-24 | NULL            |
+--------+--------------+------------+-----------------+

你可以清楚地看到左連線包含結果集中 employees 表的所有行,無論 department 表中的 dept_id 列是否匹配。

注意: 如果左表中有一行但右表中沒有匹配項,則關聯的結果行包含來自右表的所有列的值是 NULL