在本教學中,您將學習如何使用Oracle UNION
運算符來組合由兩個或多個查詢返回的結果集。
Oracle UNION運算符簡介
UNION
運算符是一個集合運算符,它將兩個或多個SELECT語句的結果集組合到一個結果集中。
以下說明了組合兩個查詢的結果集的UNION
運算符的語法:
SELECT
column_list_1
FROM
T1
UNION
SELECT
column_list_1
FROM
T2;
在此聲明中,column_list_1
和column_list_2
必須具有相同順序的相同列數。 另外,對應列的數據類型必須是相同的數據類型組,例如數字或字元。
SELECT
column_list
FROM
T1
UNION ALL
SELECT
column_list
FROM
T2;
Oracle UNION圖示
假設有兩個表 - T1
和T2
:
T1
有三行:1
,2
和3
T2
也有三行:2
,3
和4
下圖說明瞭T1
和T2
表的UNION
運算圖示:
UNION
運算符刪除(消除)重複的行 - 2
和3
下圖顯示了UNION ALL
運算符T1
和T2
表的結果:
正如上面所看到的,UNION ALL
保留了重複的行 - 2
和3
。
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_name
和last_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 JOIN或LEFT JOIN的連接將結果集水準組合。
下圖說明瞭union
和join
的區別:
在本教學中,您已經學習了如何使用Oracle UNION
運算符來組合多個查詢的結果集。