UNION 運算子 (SQL UNION Operator)
UNION 運算子用來將兩個(以上) SQL 查詢的結果合併起來,而由 UNION 查詢中各別 SQL 語句所產生的欄位需要是相同的資料型別及順序。UNION查詢只會返回不同值的資料列,有如SELECT DISTINCT。
UNION就是像是OR(聯集),如果紀錄存在於第一個查詢結果集或第二個查詢結果集中,就會被取出。
UNION與Join不同的地方在於,Join是作橫向結合(合併多個資料表的各欄位);而UNION則是作垂直結合(合併多個資料表中的紀錄)。
UNION 語法 (SQL UNION Syntax)
SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2;
UNION查詢返回的資料集欄位名稱,通常會依據第一個SELECT查詢的欄位名稱。
UNION 運算子查詢實例 (Example)
這是公司在台灣地區銷售的產品資料表「products_taiwan」:P_Id | P_Name |
---|---|
1 | LCD |
2 | CPU |
3 | RAM |
這是公司在中國大陸地區銷售的產品資料表「products_china」:
P_Id | P_Name |
---|---|
1 | Keyboard |
2 | CPU |
3 | LCD |
現在我們想查出公司所有產品類別的資料,我們可以作一個 UNION 查詢:
SELECT P_Name FROM products_taiwan UNION SELECT P_Name FROM products_china;
查詢結果如下:
P_Name |
---|
LCD |
CPU |
RAM |
Keyboard |
UNION ALL
相反的,UNION ALL 則會列出所有的資料,不論是否重複。SQL 查詢...
SELECT P_Name FROM products_taiwan UNION ALL SELECT P_Name FROM products_china;
查詢結果如下:
P_Name |
---|
LCD |
CPU |
RAM |
Keyboard |
CPU |
LCD |
SELECT Title, Url,
STUFF((
SELECT DISTINCT ',' + T.TagName FROM Hyperlink AS H
JOIN HyperlinkTag AS HT ON H.ID = HT.HyperlinkID
JOIN Tag AS T ON T.ID = HT.TagID
WHERE H.ID = Hyperlink.ID
FOR XML PATH('')
),1,1,'') AS 'Tags'
FROM Hyperlink
use [admAdventureWorks]SELECT [SalesOrderID],(SELECT [ProductID] + ',' FROM [sales].[SalesOrderDetail] as s2WHERE s1.SalesOrderID=s2.SalesOrderIDFOR XML PATH('')) as ProductID FROM [sales].[SalesOrderDetail] as s1group by [SalesOrderID],[ProductID]
QQ: 那如果就是會要數字跟字串欄位作字串串接怎麼辦?
A: 其實只要將數字欄位利用cast([ProductID] as nvarchar)來轉換就好了
A: 其實只要將數字欄位利用cast([ProductID] as nvarchar)來轉換就好了
沒有留言:
張貼留言