SQL中MINUS的用法與UNION的用法
一:MINUS指令
其是運用在兩個 SQL 語句上。
它先找出第一個 SQL 語句所產生的結果,然後看這些結果有沒有在第二個 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 指令下,不同的值只會被列出一次。
與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。
二: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
我們用以下的 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好像也可以,或是可以自動轉換數據類型),其它是不行的,還有幾個表的列數必須相同。
備註:隨筆內容來源於網上資料整理,僅供參考。
SQL中MINUS的用法與UNION的用法