Oracle 集合操作符 UNION/UNION ALL/INTERSECT/MINUS的用法

來源:互聯網
上載者:User

SET OPERATIONS
集合操作符
----合并
UNION / UNION ALL

----交集
INTERSECT

----
MINUS

集合操作的規範
-兩個查詢的 SELECT 列表必須在個數上匹配
-第二個查詢中的每個列的資料類型必須與第一個查詢中相應列的資料類型匹配
-可以使用括弧來改變執行的順序
-ORDER BY 可以也只可以出現在整個語句的結尾。

除了 UNION ALL 以外,其餘的三個操作符都會消除結果集中的重複行。
結果集使用第一個查詢中的列名顯示
預設情況下,除 UNION ALL 外,輸出以升序進行排序

樣本 table:
HR schema 下的 EMPLOYEES 和 JOB_HISTORY

樣本:
----union 返回排除重複記錄
SELECT EMPLOYEE_ID, JOB_ID
FROM EMPLOYEES
UNION
SELECT EMPLOYEE_ID, JOB_ID
FROM JOB_HISTORY;

----union all 返回包括重複記錄且不排序
SELECT EMPLOYEE_ID, JOB_ID
FROM EMPLOYEES
UNION ALL
SELECT EMPLOYEE_ID, JOB_ID
FROM JOB_HISTORY;
ORDER BY EMPLOYEE_ID;
----最後的 order by 是對整個union all 操作結果集的 order by

----INTERSECT 返回交集
SELECT EMPLOYEE_ID, JOB_ID
FROM EMPLOYEES
INTERSECT
SELECT EMPLOYEE_ID, JOB_ID
FROM JOB_HISTORY;

EMPLOYEE_ID JOB_ID
----------- ----------
        176 SA_REP
        200 AD_ASST


----MINUS 操作符(取交集)
MINUS 返回第一個查詢查詢出的所有經過 distinct 操作後的且未出現在第二個
查詢結果集中的行。

SELECT EMPLOYEE_ID
FROM EMPLOYEES
MINUS
SELECT EMPLOYEE_ID
FROM JOB_HISTORY;

----有時,兩張表中的列的資料欄位類型不符,這時可以作如下處理
SELECT LOCATION_ID,DEPARTMENT_NAME "DEPARTMENT",
       TO_CHAR(NULL) "WAREHOUSE LOCATION"
FROM DEPARTMENTS
UNION
SELECT LOCATION_ID, TO_CHAR(NULL) "DEPARTMENT", STATE_PROVINCE
FROM LOCATIONS;

LOCATION_ID DEPARTMENT                     WAREHOUSE LOCATION
----------- ------------------------------ -------------------------
       1000
       1100
       1200                                Tokyo Prefecture
       1300
       1400 IT
       1400                                Texas
       1500 Shipping
       1500                                California
       1600                                New Jersey
       1700 Accounting
       1700 Administration
       1700 Benefits
       1700 Construction
       1700 Contracting
       1700 Control And Credit
       1700 Corporate Tax
       1700 Executive
       1700 Finance
       1700 Government Sales
       1700 IT Helpdesk
       1700 IT Support
       1700 Manufacturing
       1700 NOC
       1700 Operations
       1700 Payroll
       1700 Purchasing
       1700 Recruiting
       1700 Retail Sales
       1700 Shareholder Services
       1700 Treasury
       1700                                Washington
       1800 Marketing
       1800                                Ontario
       1900                                Yukon
       2000
       2100                                Maharashtra
       2200                                New South Wales
       2300
       2400 Human Resources
       2400
       2500 Sales
       2500                                Oxford
       2600                                Manchester
       2700 Public Relations
       2700                                Bavaria
       2800                                Sao Paulo
       2900                                Geneve
       3000                                BE
       3100                                Utrecht
       3200                                Distrito Federal,

  
-----------
使用 UNION /UNION ALL /INTERSECT/MINUS
的查詢稱為組合查詢compound query
組合查詢中各個組件查詢無法單獨使用 ORDER BY 子句
ORDER BY 子句只能出現在組合查詢的最後面
ORDER BY 子句只能識別第一個查詢中的列
預設情況下,第一個查詢的第一個列用來對輸出以升序排序。
SELECT LOCATION_ID,DEPARTMENT_NAME "DEPARTMENT",
       TO_CHAR(NULL) "WAREHOUSE LOCATION"
FROM DEPARTMENTS
UNION
SELECT LOCATION_ID, TO_CHAR(NULL) "DEPARTMENT", STATE_PROVINCE
FROM LOCATIONS

ORDER BY LOCATION_ID;(這裡的LOCATION_ID只能是第一個查詢中的列名)

轉載請註明出處及原文連結,否則拒絕轉載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.