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好像也可以,或是可以自動轉換數據類型),其它是不行的,還有幾個表的列數必須相同。

備注:隨筆內容來源於網上資料整理,僅供參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM