|
導(dǎo)讀數(shù)據(jù)庫(kù),簡(jiǎn)而言之可視為電子化的文件柜——存儲(chǔ)電子文件的處所,用戶可以對(duì)文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫(kù)”是以一定方式儲(chǔ)存在一起、能與多個(gè)用戶共享、具有盡可能小的冗余度、與應(yīng)... 數(shù)據(jù)庫(kù),簡(jiǎn)而言之可視為電子化的文件柜——存儲(chǔ)電子文件的處所,用戶可以對(duì)文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫(kù)”是以一定方式儲(chǔ)存在一起、能與多個(gè)用戶共享、具有盡可能小的冗余度、與應(yīng)用程序彼此獨(dú)立的數(shù)據(jù)集合。 UNION 運(yùn)算符: 將兩個(gè)或更多查詢的結(jié)果組合為單個(gè)結(jié)果集,該結(jié)果集包含聯(lián)合查詢中的所有查詢的全部行。這與使用聯(lián)接組合兩個(gè)表中的列不同。 使用 UNION 組合兩個(gè)查詢的結(jié)果集的兩個(gè)基本規(guī)則是: 所有查詢中的列數(shù)和列的順序必須相同。 數(shù)據(jù)類(lèi)型必須兼容。 這種多結(jié)果的查詢組合為單一結(jié)果集在實(shí)際中應(yīng)用的非常方便。但在應(yīng)用中也有有著問(wèn)題,如下實(shí)例可以進(jìn)一步說(shuō)明問(wèn)題。 問(wèn)題描述: 為了進(jìn)一步分析與統(tǒng)計(jì)企業(yè)中關(guān)鍵部件的生產(chǎn)進(jìn)度情況,采用了一個(gè)表Key_Item_Cal,其結(jié)構(gòu)如圖一: 通過(guò)聯(lián)合查詢,將查詢分為三個(gè)方面: 1、提出數(shù)據(jù)的基礎(chǔ)明細(xì),其代碼如下: SELECT dbo.Key_item.Key_item_name AS Item_Name, dbo.H_MORVE.QTY_RECVD1 AS Quantity, dbo.Key_item.Style AS Style FROM dbo.Key_item LEFT OUTER JOIN dbo.H_MORVE ON dbo.Key_item.Key_item = dbo.H_MORVE.ITEM WHERE (dbo.Key_item.Key_item <> 1) Order by Style asc 其結(jié)果為: 2、提出數(shù)據(jù)的一級(jí)匯總明細(xì),其代碼如下: SELECT dbo.Key_item.Key_item_name AS Item_Name, SUM(dbo.H_MORVE.QTY_RECVD1) AS Quantity,MAX(dbo.Key_item.Style) AS Style FROM dbo.Key_item LEFT OUTER JOIN dbo.H_MORVE ON dbo.Key_item.Key_item = dbo.H_MORVE.ITEM WHERE (dbo.Key_item.Key_item <> 1) GROUP BY dbo.Key_item.Style,dbo.Key_item.Key_item_name order by Style 其結(jié)果如圖如示: 3、提出數(shù)據(jù)的二級(jí)匯總明細(xì),其代碼如下: SELECT MAX(dbo.Key_item.Key_item_name) as Item_Name, SUM(dbo.H_MORVE.QTY_RECVD1) as Quantity, dbo.Key_item.Style as Style FROM dbo.Key_item LEFT OUTER JOIN dbo.H_MORVE ON dbo.Key_item.Key_item = dbo.H_MORVE.ITEM GROUP BY dbo.Key_item.Style ORDER BY dbo.Key_item.Style asc 其結(jié)果如圖所示: 總體的設(shè)計(jì)就如以上所示,但通過(guò)UNION聯(lián)接的時(shí)候出現(xiàn)了新的問(wèn)題。通過(guò)以下例子,就可以看出UNION與UNION ALL的區(qū)別 方案一,其代碼如下: SELECT dbo.Key_item.Key_item_name AS Item_Name, dbo.H_MORVE.QTY_RECVD1 AS Quantity, dbo.Key_item.Style AS Style FROM dbo.Key_item LEFT OUTER JOIN dbo.H_MORVE ON dbo.Key_item.Key_item = dbo.H_MORVE.ITEM WHERE (dbo.Key_item.Key_item <> 1) UNION ( SELECT dbo.Key_item.Key_item_name AS Item_Name, SUM(dbo.H_MORVE.QTY_RECVD1) AS Quantity,MAX(dbo.Key_item.Style) AS Style FROM dbo.Key_item LEFT OUTER JOIN dbo.H_MORVE ON dbo.Key_item.Key_item = dbo.H_MORVE.ITEM WHERE (dbo.Key_item.Key_item <> 1) GROUP BY dbo.Key_item.Style,dbo.Key_item.Key_item_name UNION SELECT MAX(dbo.Key_item.Key_item_name) as Item_Name, SUM(dbo.H_MORVE.QTY_RECVD1) as Quantity, dbo.Key_item.Style as Style FROM dbo.Key_item LEFT OUTER JOIN dbo.H_MORVE ON dbo.Key_item.Key_item = dbo.H_MORVE.ITEM GROUP BY dbo.Key_item.Style) ORDER BY dbo.Key_item.Style asc GO 其結(jié)果如下: 問(wèn)題: 通過(guò)以上結(jié)果,可以發(fā)現(xiàn)GR180.14.2.1后機(jī)架、PY165G.14.2.1B后機(jī)架和PY165K.14.2.1后機(jī)架的明細(xì)與其二級(jí)匯總值明顯不符。而二級(jí)匯總的值是正確,為什么明細(xì)與匯總值不符? 針對(duì)這個(gè)問(wèn)題,我采用了第二種方案。 方案二,其代碼如下: SELECT dbo.Key_item.Key_item_name AS Item_Name, dbo.H_MORVE.QTY_RECVD1 AS Quantity, dbo.Key_item.Style AS Style FROM dbo.Key_item LEFT OUTER JOIN dbo.H_MORVE ON dbo.Key_item.Key_item = dbo.H_MORVE.ITEM WHERE (dbo.Key_item.Key_item <> 1) UNION ALL( SELECT dbo.Key_item.Key_item_name AS Item_Name, SUM(dbo.H_MORVE.QTY_RECVD1) AS Quantity,MAX(dbo.Key_item.Style) AS Style FROM dbo.Key_item LEFT OUTER JOIN dbo.H_MORVE ON dbo.Key_item.Key_item = dbo.H_MORVE.ITEM WHERE (dbo.Key_item.Key_item <> 1) GROUP BY dbo.Key_item.Style,dbo.Key_item.Key_item_name UNION SELECT MAX(dbo.Key_item.Key_item_name) as Item_Name, SUM(dbo.H_MORVE.QTY_RECVD1) as Quantity, dbo.Key_item.Style as Style FROM dbo.Key_item LEFT OUTER JOIN dbo.H_MORVE ON dbo.Key_item.Key_item = dbo.H_MORVE.ITEM GROUP BY dbo.Key_item.Style) ORDER BY dbo.Key_item.Style asc GO 其結(jié)果如圖: 通過(guò)以上的例子,大家可以看出在UNION與UNION ALL在應(yīng)用上區(qū)別。 全新的路由器不僅讓你更穩(wěn)定快速地連接無(wú)線網(wǎng)絡(luò),更可以讓家中的智能設(shè)備連接在一起。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!