UNION 與UNION ALL UNION 將返回兩個查詢的結(jié)果并去除其中的重復部分下邊有兩個值勤人員表:
輸入: SQL> SELECT * FROM FOOTBALL 輸出:
NAME
------
ABLE
BRAVO
CHARLIE
DECON
EXITOR
FUBAR
GOOBE
7 rows selected.
--------
輸入: SQL> SELECT * FROM SOFTBALL
輸出:
NAME
-----
ABLE
BAKER
CHARLIE
DEAN
EXITOR
FALCONER
GOOBER
7 rows selected.
--------
在這兩個表中有哪些不重復的人員呢
輸入/輸出: SQL> SELECT NAME FROM SOFTBALL 2 UNION 3 SELECT NAME FROM FOOTBALL
NAME
-------
ABLE
BAKER
BRAVO
CHARLIE
DEAN
DECON
EXITOR
FALCONER
FUBAR
GOOBER
10 rows selected.
?----------
UNION 返回了兩個表中的10 個記錄它們是不重復的但是兩個表中共有多少人呢包括重復的人員
輸入/輸出:
SQL> SELECT NAME FROM SOFTBALL 2 UNION ALL 3 SELECT NAME FROM FOOTBALL
?NAME
----------
ABLE
BAKER
CHARLIE
DEAN
EXITOR
FALCONER
GOOBER
ABLE
BRAVO
CHARLIE
DECON
EXITOR
FUBAR
GOOBER
14 rows selected.
------------------
分析可以看到UNION ALL 與UNION 一樣對表進行了合并但是它不去掉重復的記錄
可是如果我們想知道都有誰同時在兩個表中呢UNION 無法做到這一點我們需要學習使用 INTERSECT INTERSECT 相交 INTERSECT 返回兩個表中共有的行看下例它將返回兩個表中有存在的員工
輸入: SQL> SELECT * FROM FOOTBALL 2 INTERSECT 3 SELECT * FROM SOFTBALL
?輸出
NAME
--------
ABLE
CHARLIE
EXITOR
GOOBER
--------
分析這些記錄是兩個表中都存在的 MINUS 相減 MINUS 返回的記錄是存在于第一個表中但不存在于第二個表中的記錄
例如輸入: SQL> SELECT * FROM FOOTBALL MINUS SELECT * FROM SOFTBALL
輸出
NAME
--------
BRAVO
DECON
FUBAR
--------
上例中顯示了三個不在壘球隊中的足球隊員如果你把語句的次序顛倒那么你將得到在壘球隊中但不在足球隊中的隊員
輸入: SQL> SELECT * FROM SOFTBALL MINUS SELECT * FROM FOOTBALL
輸出
NAME
-------
BAKER
DEAN
FALCONER
--------