天天看點

MySQL的UNION用法

Notes:SQL檔案

介紹MySQL中的組合查詢

MySQL允許執行多個查詢(多條SELECT語句),并将結果作為單個查詢結果集傳回。這些組合查詢通常稱為并或複合查詢。

什麼時候需要使用組合查詢:

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

使用UNION

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);
           

使用WHERE寫法:

SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price <= 5 OR vend_id IN (1001,1002);
           

使用UNION拼接:

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規則

  • UNION必須由兩條以上的SELECT語句組成,語句之間用關鍵字UNION分割。
  • UNION中的每個查詢必須包含相同的列、表達式或聚集函數(各個列不需要以相同的次序列出)。
  • 列資料類型必須相容:類型不必完全相同,但必須是DBMS可以隐含地轉換的類型。
  • 如果取出來的資料不需要去重,使用UNION ALL。

UNION與WHERE

UNION幾乎總是完成與多個WHERE條件相同的工作。UNION ALL為UNION的一種形式,它完成WHERE完成不了的工作。如果确實需要每個條件的比對行全部出現(包括重複行),則必須使用UNION ALL而不是WHERE。

對組合查詢結果排序

SELECT語句的輸出用ORDER BY子句排序。在用UNION組合查詢時,隻能使用一條ORDER BY子句,它必須出現在最後一條SELECT語句之後。對于結果集,不存在用一種方式排序一部分,而又用另一種方式排序另一部分的情況,是以不允許使用多條ORDER BY子句。

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) ORDER BY vend_id,prod_price;