14 組合查詢
阿新 • • 發佈:2018-12-22
14.1 組合查詢
SQL允許執行多個查詢(多條SELECT語句),並將結果作為單個查詢結果集返回。這些組合查詢通常稱為並( union) 或複合查詢(compound query)。
有兩種基本情況,其中需要使用組合查詢:
- 在單個查詢中從不同的表返回類似結構的資料;
- 對單個表執行多個查詢,按單個查詢返回資料。
可用UNION操作符來組合數條SQL查詢。利用UNION,可給出多條SELECT語句,將它們的結果組合成單個結果集。
14.2 UNION的使用
給出每條SELECT語句,在各條語句之間放上關鍵字UNION。
例如:
需要價格小於等於5的所有物品的一個列表,而且還想包括供應商1001和1002生產的所有物品(不考慮價格)。
我們可以用兩次檢索來實現上述要求:
SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price <= 5;
SELECT vend_id, prod_id, prod_price FROM products WHERE vend_id IN (1001,1002);
第一條SELECT檢索價格不高於5的所有物品。第二條SELECT使用IN找出供應商1001和1002生產的所有物品。
為了組合這兩條語句,按如下進行:
SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price<= 5 UNION SELECT vend_id, prod_id, prod_price FROM products WHERE vend_id IN (1001,1002);
UNION指示MySQL執行兩條SELECT語句,並把輸出組合成單個查詢結果集。
其實,如果不用UNION連線,可以這樣寫:
SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price <= 5 OR vend_id IN (1001,1002);
14.3 UNION規則
- UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION
- UNION中的每個查詢必須包含相同的列、表示式或聚集函式
- 列資料型別必須相容:型別不必完全相同
14.4 包含或取消重複的行
UNION從查詢結果集中自動去除了重複的行這是UNION的預設行為,但是,如果想返回所有匹配行,可使用UNION ALL而不是UNION。
14.5 對組合查詢結果排序
SELECT語句的輸出用ORDER BY子句排序。在用UNION組合查詢時,只能使用一條ORDER BY子句,它必須出現在最後一條SELECT語句之後。