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;