sqlserver2000中
union與
unionall的
區別union運算子:
將兩個或更多查詢的結果組合為單個結果集,該結果集包含聯合查詢中的所有查詢的全部行。這與使用聯接組合兩個表中的列不同。
使用union組合兩個查詢的結果集的兩個基本規則是:
所有查詢中的列數和列的順序必須相同。
資料型別必須相容。
這種多結果的查詢組合為單一結果集在實際中應用的非常方便。但在應用中也有有著問題,如下例項可以進一步說明問題。
問題描述:
為了進一步分析與統計企業中關鍵部件的生產進度情況,採用了乙個表key_item_cal,其結構如圖一:
圖一通過聯合查詢,將查詢分為三個方面:
1、提出資料的基礎明細,其**如下:
selectdbo.key_item.key_item_nameasitem_name,
dbo.h_morve.qty_recvd1asquantity,dbo.key_item.styleasstyle
fromdbo.key_itemleftouterjoin
dbo.h_morveondbo.key_item.key_item=dbo.h_morve.item
where(dbo.key_item.key_item<>1)
orderbystyleasc
其結果為:
2、提出資料的一級彙總明細,其**如下:
selectdbo.key_item.key_item_nameasitem_name,
sum(dbo.h_morve.qty_recvd1)asquantity,max(dbo.key_item.style)asstyle
fromdbo.key_itemleftouterjoin
dbo.h_morveondbo.key_item.key_item=dbo.h_morve.item
where(dbo.key_item.key_item<>1)
groupbydbo.key_item.style,dbo.key_item.key_item_name
orderbystyle
其結果如圖如示:
3、提出資料的二級彙總明細,其**如下:
select max(dbo.key_item.key_item_name)asitem_name,
sum(dbo.h_morve.qty_recvd1)asquantity,
dbo.key_item.styleasstyle
fromdbo.key_itemleftouterjoin
dbo.h_morveondbo.key_item.key_item=dbo.h_morve.item
groupbydbo.key_item.style
orderbydbo.key_item.styleasc
其結果如圖所示:
總體的就如以上所示,但通過
union聯接的時候出現了新的問題。通過以下例子,就可以看出
union與
unionall的
區別方案一,其**如下:
selectdbo.key_item.key_item_nameasitem_name,
dbo.h_morve.qty_recvd1asquantity,dbo.key_item.styleasstyle
fromdbo.key_itemleftouterjoin
dbo.h_morveondbo.key_item.key_item=dbo.h_morve.item
where(dbo.key_item.key_item<>1)
union(
selectdbo.key_item.key_item_nameasitem_name,
sum(dbo.h_morve.qty_recvd1)asquantity,max(dbo.key_item.style)asstyle
fromdbo.key_itemleftouterjoin
dbo.h_morveondbo.key_item.key_item=dbo.h_morve.item
where(dbo.key_item.key_item<>1)
groupbydbo.key_item.style,dbo.key_item.key_item_name
union
selectmax(dbo.key_item.key_item_name)asitem_name,sum(dbo.h_morve.qty_recvd1)asquantity,
dbo.key_item.styleasstyle
fromdbo.key_itemleftouterjoin
dbo.h_morveondbo.key_item.key_item=dbo.h_morve.item
groupbydbo.key_item.style)
orderbydbo.key_item.styleasc
go其結果如下:
問題:通過以上結果,可以發現gr180.14.2.1後機架、py165g.14.2.1b後機架和py165k.14.2.1後機架的明細與其二級彙總值明顯不符。而二級彙總的值是正確,為什麼明細與彙總值不符?1
SQL語句中 UNION與UNION ALL的區別
union用的比較多union all是直接連線,取到得是所有值,記錄可能有重複 union 是取唯一值,記錄沒有重複 1 union 的語法如下 sql 語句 1 union sql 語句 2 2 union all 的語法如下 sql 語句 1 union all sql 語句 2 效率 uni...
SQL語句中 UNION與UNION ALL的區別
union用的比較多 union all是直接連線,取到得是所有值,記錄可能有重複 union 是取唯一值,記錄沒有重複 1 union 的語法如下 sql 語句 1 union sql 語句 2 2 union all 的語法如下 sql 語句 1 union all sql 語句 2 效率 un...
SQL語句中 UNION與UNION ALL的區別
union用的比較多union all是直接連線,取到得是所有值,記錄可能有重複 union 是取唯一值,記錄沒有重複 1 union 的語法如下 sql 語句 1 union sql 語句 2 2 union all 的語法如下 sql 語句 1 union all sql 語句 2 效率 uni...