在本教程中,您將學(xué)習(xí)如何使用SQL右連接從兩個(gè)表中獲取數(shù)據(jù)。
RIGHT JOIN是與LEFT JOIN完全相反。它返回右表中的所有行以及左表中滿足連接條件的行。
右連接是外連接的一種,因此也被稱為right outer join。外部聯(lián)接的其他變體是左聯(lián)接和完全聯(lián)接。下維恩圖說明了右聯(lián)接的工作方式。
注意:外部聯(lián)接是一種聯(lián)接,它在結(jié)果集中包含行,即使要聯(lián)接的兩個(gè)表中的行之間可能不匹配。
為了清楚地理解這一點(diǎn),讓我們來看看下面employees和departments表。
+--------+--------------+------------+---------+ | 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 | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ | |
表: employees | 表: departments |
現(xiàn)在,假設(shè)您要檢索所有部門的名稱以及在該部門工作的員工的詳細(xì)信息。但是,在實(shí)際情況下,可能有些部門目前沒有員工在工作。好吧,讓我們找出答案。
以下語(yǔ)句通過使用通用的dept_id字段將employee和department表連接在一起,檢索所有可用部門以及該部門員工的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;
提示:在聯(lián)接查詢中,左邊的表是在JOIN子句中最左邊出現(xiàn)的表,右邊的表是在最右邊出現(xiàn)的表。
執(zhí)行上述命令后,您將獲得如下輸出:
+--------+--------------+------------+------------------+ | 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 | +--------+--------------+------------+------------------+
正確的聯(lián)接包括結(jié)果集中部門表中的所有行,無(wú)論雇員表中的dept_id列是否匹配,因?yàn)槟梢郧宄乜吹?,即使該部門沒有員工,也將包含“Customer Service”。
注意:如果右表中有一行,但左表中沒有匹配項(xiàng),則關(guān)聯(lián)的結(jié)果行將包含來自左表的所有列的NULL值。