在本教學中,您將學習如何使用Oracle中的RIGHT OUTER JOIN
來連接兩個或多個表。
Oracle RIGHT OUTER JOIN概述
假設有兩個表T1
和T2
,以下語句顯示了如何使用Oracle中的RIGHT OUTER JOIN
子句連接這兩個表:
SELECT
column_list
FROM
T1
RIGHT OUTER JOIN T2 ON
join_predicate;
在這個語句中,T1
和T2
分別是左表和右表。
OUTER
關鍵字是可選的,因此RIGHT OUTER JOIN
和RIGHT JOIN
效果是相同的。
下麵是RIGHT OUTER JOIN
的工作原理。
T1
表中的每行都與T2
表中的行進行比較:
- 如果一對行滿足連接謂詞,則將兩行的列值合併,以生成結果行,然後將其包含在結果集中。
- 如果
T2
表中的一行與T1
表中的任何一行不匹配,則T2
表中的行的列值將與T1
表中的每行的每一列使用NULL
值組合生成在結果集中。
換句話說,右外連接返回右表中的所有行,以及左表中的匹配行。
1. Oracle RIGHT OUTER JOIN示例
我們將使用示例資料庫中的orders
和employees
表進行演示:
在該ER圖中,銷售員負責一個或多個銷售訂單。 但是,一些銷售訂單可能不由任何銷售人員負責。
以下示例檢索所有銷售員及其銷售訂單(如果有):
SELECT
first_name,
last_name,
order_id,
status
FROM
orders
RIGHT JOIN employees ON
employee_id = salesman_id
WHERE
job_title = 'Sales Representative'
ORDER BY
first_name,
last_name;
執行上面查詢語句,得到以下結果 -
結果包括職位名稱為Sales Representative
的所有員工及其訂單。
如果銷售員不負責任何銷售訂單(如Alice Wells
,Charlotte Webb
),則order_id
和status
列將填充NULL
值。
2. Oracle RIGHT OUTER JOIN使用USING子句的示例
與其他連接(如INNER JOIN,LEFT JOIN)類似,可以使用USING
子句指定在連接表時要測試哪個列的相等性。
下麵說明RIGHT OUTER JOIN
使用USING
子句的語法:
SELECT
column_list
FROM
T1
RIGHT OUTER JOIN T2 USING(c1,c2,c3);
在此查詢中,USING
子句中列出的列必須出現在T1
和T2
表中。
以下聲明等同於上面的語句:
SELECT
column_list
FROM
T1
RIGHT OUTER JOIN T2 ON
T1.c1 = T2.c1
AND T1.c2 = T2.c2
AND T1.c3 = T2.c3;
以下語句演示如何使用USING
子句中的RIGHT OUTER JOIN
:
SELECT
name,
order_id,
status
FROM
orders
RIGHT JOIN customers
USING(customer_id)
ORDER BY
name;
執行上面查詢語句,得到以下結果 -
在此示例中,所有客戶都包含在結果集中。 如果客戶沒有銷售訂單,則order_id
和status
列將填充NULL
值。
3. Oracle RIGHT JOIN:條件在ON與WHERE子句中
以下語句獲取銷售員ID為57
的員工和訂單數據。
SELECT
employee_id,
last_name,
first_name,
order_id,
status
FROM
orders
RIGHT JOIN employees ON
employee_id = salesman_id
WHERE
employee_id = 57;
執行上面示查詢語句,得到以下結果 -
以下語句將條件放在WHERE
子句中而不是ON
子句中:
SELECT
employee_id,
last_name,
first_name,
order_id,
status
FROM
orders
RIGHT JOIN employees ON
employee_id = salesman_id
AND employee_id = 57;
執行上面示查詢語句,得到以下結果 -
查詢返回所有員工,但只有員工ID為57
有相關的訂單數據。
注意:有關INNER JOIN的注意事項是,條件放在
ON
子句中與放在WHERE
子句中具有相同的效果。
在本教學中,您已經學習了如何使用Oracle中的RIGHT OUTER JOIN
來查詢多個表中的數據。