UNION()
對於LIBRARY數據庫並沒有太多的必要使用UNION操作這裡假定我們想將圖書名稱的完整列表與作者名字的列表組合在一起或許你想創建一個主列表其中既包含了圖書的名稱又包含了圖書的作者在其中可以通過名稱或通過作者來查找圖書
SELECT
booksbk_title AS title
FROM books
UNION
SELECT
authorsau_last_name
FROM authors
UNION查詢並不在表之間建立鏈接或者連接它只是簡單地將其追加在一起即將返回的一個子集追加在另外一個子集的末尾請注意UNION操作的語法與JOIN的語法是不同的UNION反映了這樣的事實表並沒有連接在一起而只是簡單地粘合起來如表所示
表 UNION查詢的結果
(續表)
注意圖書名稱和作者名字全都包含在結果集的同一個列中並且按照字母表順序進行排序記錄的順序與這些記錄從哪裡獲取無關讀者用自己的RDBMS測試時可能會得到不同的結果集因為並非所有RDBMS都支持這種排序功能如果需要使結果集按照指定的順序進行排序請使用ORDER BY子句
如果對於使用UNION操作符合並起來的查詢同時又使用了ORDER BY子句那麼請注意排序是針對整個結果集進行的無法對UNION的單個查詢使用ORDER BY子句只能對整個UNION語句使用ORDER BY子句
必須注意的重要問題是數據的兼容性之所以可以創建一個圖書名稱和作者名字的列表是因為這兩個字段都是字符串類型UNION操作無法合並不同數據類型的數據例如無法把從一個表中獲取的日期與從另外一個表中獲取的價格進行合並這樣的列表又有什麼意義呢?(當然我們可以創建一個查詢將日期放在查詢結果集的一個列中並將價格放在另外一個列中例如各季度的銷售業績這種情況適合使用JOIN查詢而不適合使用UNION操作因為UNION操作的功能是把來自不同表中的數據合並到結果集的同一個列中因此合並的數據必須具有相同的數據類型)UNION操作不僅要求數據類型具有兼容性而且還要求數據集的結構也具有兼容性即在每一個查詢的SELECT字段列表中所指定的列在數量上必須是相同的並且相應的列的數據類型必須是兼容的
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16466.html