Oracle右連線


在本教學中,您將學習如何使用Oracle中的RIGHT OUTER JOIN來連線兩個或多個表。

Oracle RIGHT OUTER JOIN概述

假設有兩個表T1T2,以下語句顯示了如何使用Oracle中的RIGHT OUTER JOIN子句連線這兩個表:

SELECT
    column_list
FROM
    T1
RIGHT OUTER JOIN T2 ON
    join_predicate;

在這個語句中,T1T2分別是左表和右表。

OUTER關鍵字是可選的,因此RIGHT OUTER JOINRIGHT JOIN效果是相同的。

下面是RIGHT OUTER JOIN的工作原理。

T1表中的每行都與T2表中的行進行比較:

  • 如果一對行滿足連線謂詞,則將兩行的列值合併,以生成結果行,然後將其包含在結果集中。
  • 如果T2表中的一行與T1表中的任何一行不匹配,則T2表中的行的列值將與T1表中的每行的每一列使用NULL值組合生成在結果集中。

換句話說,右外連線返回右表中的所有行,以及左表中的匹配行。

1. Oracle RIGHT OUTER JOIN範例

我們將使用範例資料庫中的ordersemployees表進行演示:

RIGHT OUTER JOIN示例

在該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;

執行上面查詢語句,得到以下結果 -

Oracle右連接

結果包括職位名稱為Sales Representative的所有員工及其訂單。

如果銷售員不負責任何銷售訂單(如Alice WellsCharlotte Webb),則order_idstatus列將填充NULL值。

2. Oracle RIGHT OUTER JOIN使用USING子句的範例

與其他連線(如INNER JOINLEFT JOIN)類似,可以使用USING子句指定在連線表時要測試哪個列的相等性。

下面說明RIGHT OUTER JOIN使用USING子句的語法:

SELECT
    column_list
FROM
    T1
RIGHT OUTER JOIN T2 USING(c1,c2,c3);

在此查詢中,USING子句中列出的列必須出現在T1T2表中。

以下宣告等同於上面的語句:

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;

執行上面查詢語句,得到以下結果 -

Oracle右連接

在此範例中,所有客戶都包含在結果集中。 如果客戶沒有銷售訂單,則order_idstatus列將填充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;

執行上面示查詢語句,得到以下結果 -

Oracle右連接

以下語句將條件放在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;

執行上面示查詢語句,得到以下結果 -

Oracle右連接

查詢返回所有員工,但只有員工ID為57有相關的訂單資料。

注意:有關INNER JOIN的注意事項是,條件放在ON子句中與放在WHERE子句中具有相同的效果。

在本教學中,您已經學習了如何使用Oracle中的RIGHT OUTER JOIN來查詢多個表中的資料。