Oracle 組合查詢

來源:互聯網
上載者:User

組合查詢,顧名思義就是組合兩個或者多個表,進行複雜的查詢。組合查詢有點類似高一的數學:集合。故又分為:全集,子集,並集,交集。

先預覽將用到的表:

表_1:

SQL> SELECT * FROM EMPCHK; EMP_ID    EMP_NAME             EMP_ST_ADDR                    EMP_ZIP EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_SALRAY--------- -------------------- ------------------------------ ------- -------------------- -------------------- ----------- ----------100000    ZOU QI LEI           BAN TIAN BULONG STREET         518000  YANG MEI VILLAGE     SHEN ZHEN            123456789         3500100001    CAI FANG JIE         BAN TIAN BULONG STREET         518000  YANG MEI VILLAGE     SHEN ZHEN            18218429577 100002    LU JING HUAN         FAN YU SESSION                 430060  YANG MEI VILLAGE     GUANG ZHOU           1397165903  100003    WU JING XIN          HU BEI DIER SHIFAN XUEYUAN     430060  MING ZHU YUAN        WU HAN               187****235  100004    LI WEI               QING SHAN GANG DU HUA YUAN     430060  XIAO QU              WU HAN               197****436  

表_2:

SQL> SELECT * FROM EMPCHKTMP; EMP_ID    EMP_NAME             EMP_ST_ADDR                    EMP_ZIP EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_SALRAY--------- -------------------- ------------------------------ ------- -------------------- -------------------- ----------- ----------100001    CAI FANG JIE         BAN TIAN BULONG STREET         518000  YANG MEI VILLAGE     SHEN ZHEN            18218429577 100003    WU JING XIN          HU BEI DIER SHIFAN XUEYUAN     430060  MING ZHU YUAN        SHEN ZHEN            187****235  100005    DING LING            HAN KOU TAI BEI LU             430060  TIAN MEN DUN NEARBY  WU HAN               137***4256        2000 

 

UNION ALL : 顧名思義是取全集。例如:

SQL> SELECT EMP_ADDR FROM EMPCHK UNION ALL SELECT EMP_ST_ADDR FROM EMPCHKTMP ORDER BY EMP_ADDR ; EMP_ADDR------------------------------BAN TIAN BULONG STREETHAN KOU TAI BEI LUHU BEI DIER SHIFAN XUEYUANMING ZHU YUANXIAO QUYANG MEI VILLAGEYANG MEI VILLAGEYANG MEI VILLAGE 8 rows selected

可以看到在顯示方式上是以EMP_ADDR作為列項,這也是為何ORDER BY EMP_ADDR 而不是 EMP_ST_ADDR, 而且在查詢返回的結果中包含了EMP_ADDR 和EMP_ST_ADDR所有的表項.

 

UNION: 顧名思義是取並集,切不包含重複的表項,例如:

SQL> SELECT EMP_ST_ADDR FROM EMPCHK UNION SELECT EMP_ADDR FROM EMPCHKTMP ORDER BY EMP_ST_ADDR ; EMP_ST_ADDR------------------------------BAN TIAN BULONG STREETFAN YU SESSIONHU BEI DIER SHIFAN XUEYUANMING ZHU YUANQING SHAN GANG DU HUA YUANTIAN MEN DUN NEARBYYANG MEI VILLAGE 7 rows selected

可以看到在顯示方式上是以EMP_ST_ADDR作為表項,這也是為何ORDER BY EMP_ST_ADDR的原因。即:在顯示時,永遠用第一個SELECT 後邊的查詢欄位作為清單項目。

可以看到UNION組合查詢時只返回了一個YANG MEI VILLAGE。即取兩個表內容不重複的選項,而且忽略同一表中重複的表項。


INTERSECT:顧名思義是取交集,即取兩個表或多個表中內容相同的表項。例如:

SQL> SELECT EMP_ST_ADDR FROM EMPCHK INTERSECT SELECT EMP_ST_ADDR FROM EMPCHKTMP ; EMP_ST_ADDR------------------------------BAN TIAN BULONG STREETHU BEI DIER SHIFAN XUEYUAN

MINUS: 顧名思義取子集,即第一個表有而第二個表沒有的表項.例如:

SQL> SELECT EMP_ST_ADDR FROM EMPCHK MINUS SELECT EMP_ST_ADDR FROM EMPCHKTMP; EMP_ST_ADDR------------------------------FAN YU SESSIONQING SHAN GANG DU HUA YUAN

可以看到欄位:

FAN YU SESSIONQING SHAN GANG DU HUA YUAN

在第二個表:EMPCHKTMP中是沒有的。

總結:UNION ALL 取全集,UNION 取並集(除去重複項),INTERSECT 取交集,MINUS 取子集。。且各個查詢欄位即SELECT後面的欄位必須是同一類型,且數量要相等..

下面加入第三個查詢表:EMPCHKSUB,預覽:

SQL> SELECT * FROM EMPCHKSUB; EMP_ID    EMP_NAME        EMP_PHONE   EMP_SALRAY--------- --------------- ----------- ----------100001    CAI FANG JIE    18218429577 100002    LU JING HUAN    1397165903  100003    WU JING XIN     187****235  100004    LI WEI          197****436  

組合查詢可以組合兩個或者多個表,例如下面根據名字欄位進行查詢:

SQL> SELECT EMP_NAME FROM EMPCHK  2  UNION ALL SELECT EMP_NAME FROM EMPCHKTMP  3  UNION ALL  SELECT EMP_NAME FROM EMPCHKSUB  4  ORDER BY EMP_NAME ; EMP_NAME--------------------CAI FANG JIECAI FANG JIECAI FANG JIEDING LINGLI WEILI WEILU JING HUANLU JING HUANWU JING XINWU JING XINWU JING XINZOU QI LEI 12 rows selected

返回了三個表中所有的名字欄位。

再比如用MINUS進行組合查詢,返回TAB_1 - TAB_2 - TAB_3的集合。:

SQL> SELECT EMP_NAME FROM EMPCHK  2  MINUS SELECT EMP_NAME FROM EMPCHKTMP  3  MINUS SELECT EMP_NAME FROM EMPCHKSUB  4  ORDER BY EMP_NAME ; EMP_NAME--------------------ZOU QI LEI

可以看到名字欄位ZOU QI  LEI 只存在於EMPCHK 中  且不存在於EMPCHKTMP和EMPCHKSUB兩個表中。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.