1. 程式人生 > >14 組合查詢

14 組合查詢

14.1 組合查詢

SQL允許執行多個查詢(多條SELECT語句),並將結果作為單個查詢結果集返回。這些組合查詢通常稱為並( union) 或複合查詢(compound query)。
有兩種基本情況,其中需要使用組合查詢:

  • 在單個查詢中從不同的表返回類似結構的資料;
  • 對單個表執行多個查詢,按單個查詢返回資料。


可用UNION操作符來組合數條SQL查詢。利用UNION,可給出多條SELECT語句,將它們的結果組合成單個結果集。
14.2 UNION的使用

給出每條SELECT語句,在各條語句之間放上關鍵字UNION
例如:
需要價格小於等於5的所有物品的一個列表,而且還想包括供應商10011002生產的所有物品(不考慮價格)。
我們可以用兩次檢索來實現上述要求:

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找出供應商10011002生產的所有物品。

為了組合這兩條語句,按如下進行:

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語句之後。