Sql中的並(UNION)、交(INTERSECT)、差(minus)、除去(EXCEPT)詳解

限制條件

  • (1)所有查詢中的列數和列的順序必須相同。
  • (2)比較的兩個查詢結果集中的列數據類型可以不同但必須兼容。
  • (3)比較的兩個查詢結果集中不能包含不可比較的數據類型(xml、text、ntext、image 或非二進制 CLR 用戶定義類型)的列。
  • (4)返回的結果集的列名與操作數左側的查詢返回的列名相同。ORDER BY 子句中的列名或別名必須引用左側查詢返回的列名。
  • (5)不能與 COMPUTE 和 COMPUTE BY 子句一起使用。
  • (6)通過比較行來確定非重複值時,兩個 NULL 值被視爲相等。(EXCEPT 或 INTERSECT 返回的結果集中的任何列的爲空性與操作數左側的查詢返回的對應列的爲空性相同。)

UNION 並集

查詢選修了180101號或180102號課程或二者都選修了的學生學號、課程號和成績。

(SELECT  學號, 課程號, 成績

FROM   學習

WHERE   課程號='180101')

  UNION

(SELECT 學號, 課程號, 成績

FROM 學習

WHERE    課程號='180102')

與SELECT子句不同,UNION運算自動去除重複。因此,在本例中,若只輸出學生的學號,則相同的學號只出現一次。如果想保留所有的重複,則必須用UNION ALL代替UNION,且查詢結果中出現的重複元組數等於兩個集合中出現的重複元組數的和。

 

INTERSECT 交集

intersect運算 返回查詢結果中相同的部分既他們的交集

查詢同時選修了180101和180102號課程的學生學號、課程號和成績。

(SELECT  學號, 課程號, 成績

FROM   學習

WHERE 課程號='180101')

INTERSECT

(SELECT 學號, 課程號, 成績

FROM 學習

WHERE 課程號='180102')

INTERSECT運算自動去除重複,如果想保留所有的重複,必須用INTERSECT ALL代替INTERSECT,結果中出現的重複元組數等於兩集合出現的重複元組數裏較少的那個。

minus-(oracle) 差集

返回在第一個查詢結果中與第二個查詢結果不相同的那部分行記錄,
即兩個結果的差集,
請注意,在 MINUS 指令下,不同的值只會被列出一次。 

語法

[SQL 語句 1]
MINUS
[SQL 語句 2];


 select * from abc2
    minus
  select * from abc ;

Store_Information 表格

 

Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999

Internet Sales 表格

Txn_Date Sales
07-Jan-1999 250
10-Jan-1999 535
11-Jan-1999 320
12-Jan-1999 750

而我們要知道有哪幾天是有店面營業額而沒有網絡營業額的。要達到這個目的,我們用以下的 SQL 語句:

SELECT Txn_Date FROM Store_Information
MINUS
SELECT Txn_Date FROM Internet_Sales;

結果:

 

Txn_Date
Jan-05-1999
Jan-08-1999

 'Jan-05-1999', 'Jan-07-1999', 和 'Jan-08-1999' 是 "SELECT Txn_Date FROM Store_Information" 所產生的結果。在這裏面,'Jan-07-1999' 是存在於 "SELECT Txn_Date FROM Internet_Sales" 所產生的結果中。因此 'Jan-07-1999' 並不在最後的結果中。

 

EXCEPT (mysql不支持)

EXCEPT 返回兩個結果集的差(即從左查詢中返回右查詢沒有找到的所有非重複值)。

查詢選修了180101號課程的學生中沒有選修180102號課程的學生學號、課程號和成績。

(SELECT  學號, 課程號, 成績

FROM   學習

WHERE  課程號='180101')

EXCEPT

(SELECT 學號, 課程號, 成績

FROM 學習

WHERE   課程號='180102')



EXCEPT運算自動去除重複,如果想保留所有的重複,必須用EXCEPT ALL代替EXCEPT,結果中出現的重複元組數等於兩集合出現的重複元組數之差(前提是差是正值)。

在不支持INTERSECT和EXCEPT運算的DBMS中,必須使用其它方法實現,其中,嵌套查詢是十分有效的一種方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章