2010年9月15日 星期三

SQL (Union 和 Union All)

http://www.1keydata.com/tw/sql/sqlunionall.html

UNION
指令的目的是將兩個 SQL 語句的結果合併起來。 從這個角度來看, UNIONJOIN 有些許類似,因為這兩個指令都可以 由多個表格中擷取資料。 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" 的話,那我們會得到完全一樣的結果。

*************************************************************************************

UNION ALL 這個指令的目的也是要將兩個 SQL 語句的結果 合併在一起。 UNION ALLUNION 不同 之處在於 UNION ALL 會將每一筆符合條件的資料都列出來,無論資料值 有無重複。

UNION ALL 的語法如下:

[SQL 語句 1]
UNION ALL
[SQL 語句 2]

我們用和上一頁同樣的例子來顯示出 UNION ALLUNION 的不同。同樣假設我們有以下兩個表格,

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 ALL
SELECT Date FROM Internet_Sales

結果:

Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-08-1999
Jan-07-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999

沒有留言:

張貼留言