SQL RIGHT JOIN 操作
在本教程中,你將學習如何使用 SQL 右連線從兩個表中獲取資料。
使用右連線
RIGHT JOIN
是跟 LEFT JOIN
完全相反。它返回右表中的所有行以及滿足連線條件的左表中的行。
右連線是一種外連線,這也是它被稱為右外連線的原因。外連線的其他變體是左連線和完全連線。以下維恩圖說明了右連線的工作原理。
注意: 外連線是,即使要連線的兩個表中的行之間沒有匹配,結果集中也會有行存在的連線。
為了清楚地理解這一點,讓我們看看以下 employees 和 departments 表。
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 |
+---------+------------------+
現在,假設你要檢索所有部門的名稱以及在該部門工作的員工的詳細資訊。但是,在實際情況中,可能有一些部門目前沒有員工在工作。好的,我們來看看。
以下語句通過使用公共 dept_id 欄位將 employees 和 departments 表連線在一起來檢索所有可用部門以及屬於該部門的員工的 ID,名稱和僱用日期。
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY dept_name;
提示: 在連線查詢中,左表是在 JOIN
子句中最左側出現的表,右表是最右側出現的表。
執行上面的命令後,你會得到這樣的輸出:
+--------+--------------+------------+------------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+------------------+
| 2 | Tony Montana | 2002-07-15 | Administration |
| NULL | NULL | NULL | Customer Service |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 3 | Sarah Connor | 2005-10-18 | Sales |
+--------+--------------+------------+------------------+
右連線包括 departments 表中的所有行,無論 employee 表中的 dept_id 列是否匹配,因為即使沒有 emplpoee
,你也可以清楚地看到部門 Customer Service
在結果中。
注意: 如果右表中有一行但左表中沒有匹配項,則關聯的結果行中來自左表的所有列的值為 NULL
。