1. 程式人生 > >SQL中MINUS的用法

SQL中MINUS的用法

minus指令是運用在兩個 SQL 語句上。它先找出第一個 SQL 語句所產生的結果,然後看這些結果有沒有在第二個 SQL 語句的結果中。如果有的話,那這一筆資料就被去除,而不會在最後的結果中出現。如果第二個 SQL 語句所產生的結果並沒有存在於第一個 SQL 語句所產生的結果內,那這筆資料就被拋棄。
MINUS 的語法如下:
[SQL 語句 1]
MINUS
[SQL 語句 2]
我們繼續使用一樣的例子:
Store_Information 表格
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999

Internet Sales 表格 Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750

而我們要知道有哪幾天是有店面營業額而沒有網路營業額的。要達到這個目的,我們用以下的 SQL 語句:
SELECT Date FROM Store_Information
MINUS
SELECT Date FROM Internet_Sales
結果:
Date
Jan-05-1999
Jan-08-1999

“Jan-05-1999”, “Jan-07-1999”, and “Jan-08-1999” 是 “SELECT Date FROM Store_Information” 所產生的結果。在這裡面,“Jan-07-1999” 是存在於 “SELECT Date FROM Internet_Sales” 所產生的結果中。因此 “Jan-07-1999” 並不在最後的結果中。
請注意,在 MINUS 指令下,不同的值只會被列出一次。
SQL中的UNION用法
UNION 指令的目的是將兩個 SQL 語句的結果合併起來。從這個角度來看, UNION 跟 JOIN 有些許類似,因為這兩個指令都可以由多個表格中擷取資料。 UNION 的一個限制是兩個 SQL 語句所產生的欄位需要是同樣的資料種類。另外,當我們用 UNION這個指令時,我們只會看到不同的資料值 (類似 SELECT DISTINCT)。
UNION 的語法如下:
[SQL 語句 1]
UNION
[SQL 語句 2]
假設我們有以下的兩個表格,
表格: Store_Information
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
表格: Internet Sales
Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750
而我們要找出來所有有營業額 (sales) 的日子。要達到這個目的,我們用以下的 SQL 語句:
SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
結果:
Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999
有一點值得注意的是,如果我們在任何一個 SQL 語句 (或是兩句都一起) 用 “SELECT DISTINCT Date” 的話,
那我們會得到完全一樣的結果。
名字可以不一樣。但是,資料型別必須相似。
也就是說主表(第一個表)第一列是varchar(100),副表(第一個以外的所有表)的第一列都要是varchar(100&&<100)(char好像也可以你試一下吧,或是可以自動轉換資料型別),其它是不行的,
還有幾個表的列數必須相同
++++++++++++++++++++++++
與MINUS功能類似的有
第一個
SELECT 表1.*
FROM 表1, 表2
WHERE 表1.主鍵=表2.主鍵(+)
AND 表2.主鍵 IS NULL;
第二個
select * from 表1 where not exists(select 1 from 表2 where 表1.主鍵=表2.主鍵);
第三個
select * from 表1 where 表1.主鍵 not in (select 主鍵 from 表2);
當然效率較高的還是MINUS。