Oracle Union運算符

在本教學中,您將學習如何使用Oracle UNION運算符來組合由兩個或多個查詢返回的結果集。

Oracle UNION運算符簡介

UNION運算符是一個集合運算符,它將兩個或多個SELECT語句的結果集組合到一個結果集中。

以下說明了組合兩個查詢的結果集的UNION運算符的語法:

SELECT
    column_list_1
FROM
    T1
UNION
SELECT
    column_list_1
FROM
    T2;

在此聲明中,column_list_1column_list_2必須具有相同順序的相同列數。 另外,對應列的數據類型必須是相同的數據類型組,例如數字字元

SELECT
    column_list
FROM
    T1
UNION ALL
SELECT
    column_list
FROM
    T2;

Oracle UNION圖示

假設有兩個表 - T1T2

  • T1有三行:1,23
  • T2也有三行:2,34

下圖說明瞭T1T2表的UNION運算圖示:

UNION運算符刪除(消除)重複的行 - 23

下圖顯示了UNION ALL運算符T1T2表的結果:

正如上面所看到的,UNION ALL保留了重複的行 - 23

Oracle UNION示例

請參閱示例資料庫中的以下employees表和contacts表的ER圖結構。

Oracle UNION示例1

假設,需要發送電子郵件到員工和聯繫人表的電子郵件地址。 要做到這一點,首先,需要撰寫員工和聯繫人的電子郵件地址列表。然後發送電子郵件到列表中。

以下語句使用UNION運算符來構建員工和聯繫人表中的聯繫人列表:

SELECT
    first_name,
    last_name,
    email,
    'contact'
FROM
    contacts
UNION SELECT
    first_name,
    last_name,
    email,
    'employee'
FROM
    employees;

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

2. Oracle UNION和ORDER BY示例

要對由UNION運算符返回的結果集進行排序,可以將ORDER BY子句添加到最後一個SELECT語句中,如下所示:

SELECT
    first_name || ' ' || last_name name,
    email,
    'contact'
FROM
    contacts
UNION SELECT
    first_name || ' ' || last_name name,
    email,
    'employee'
FROM
    employees
ORDER BY
    name DESC;

在這個例子中,將first_namelast_name連接起來,並使用一個別名:name,結果按name列排序。
執行上面查詢代碼,得到以下結果 -

3. Oracle UNION ALL示例

以下語句返回員工和聯繫人的唯一姓氏(last_name):

SELECT
    last_name
FROM
    employees
UNION SELECT
    last_name
FROM
    contacts
ORDER BY
    last_name;

該查詢返回了357個唯一的姓氏(last_name)值。參考下麵結果 -

但是,如果在查詢中使用UNION ALL而不是UNION,如下所示:

SELECT
    last_name
FROM
    employees
UNION ALL SELECT
    last_name
FROM
    contacts
ORDER BY
    last_name;

該查詢返回426行。 另外,一些行是重複的,例如,Atkinson, Barnett。 這是因為UNION ALL操作符不會刪除重複的行。

Oracle UNION 與 JOIN 區別

UNION將結果集放置在另一個上面,這意味著它將垂直地附加結果集。但是,諸如INNER JOINLEFT JOIN的連接將結果集水準組合。

下圖說明瞭unionjoin的區別:

在本教學中,您已經學習了如何使用Oracle UNION運算符來組合多個查詢的結果集。


上一篇: Oracle All運算符 下一篇: Oracle Intersect運算符