【MySQL必知必會】學習筆記Day8

【MySQL必知必會】學習筆記Day8&1.31&D17章&P113-118頁

15、組合查詢

(1)組合查詢

  • 有兩種基本情況,其中需要使用組合查詢
    • 在單個查詢中從不同的表返回類似結構的數據;
    • 對單個表執行多個查詢,按單個查詢返回數據。

注:多數情況下,組合相同表的兩個查詢完成的工作與具有多個WHERE子句條件的單條查詢完成的工作相同。換句話說,任何具有多個WHERE子句的SELECT語句都可以作爲一個組合查詢給出

(2)創建組合查詢

  • 可用UNION操作符來組合數條SQL查詢

① 使用UNION

  • eg:需要價格小於等於5的所有物品的一個列表,而且還想包括供應商1001和1002生產的所有物品(不考慮價格)
    1. 分着單條查詢
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);
    1. 組合查詢
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);
    1. 使用多條where語句達到相同查詢效果
SELECT vend_id,prod_id,prod_price
FROM  products
WHERE prod_price<=5
        OR vend_id IN(1001,1002);

② UNION規則

  • UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔(如果組合4條SELECT語句,將要使用3個UNION關鍵字)
  • UNION中的每個查詢必須包含相同的列、表達式或聚集函數(不過各個列不需要以相同的次序列出)。
  • 列數據類型必須兼容:類型不必完全相同,但必須是DBMS可以隱含地轉換的類型(例如,不同的數值類型或不同的日期類型)。

③ 包含或取消重複的行

  • UNION會默認去除重複的行,使用UNION ALL,則不取消重複行
SELECT vend_id,prod_id,prod_price
FROM  products
WHERE prod_price<=5
UNION ALL
SELECT vend_id,prod_id,prod_price
FROM  products
WHERE vend_id IN(1001,1002);

④ 對組合查詢結果排序

  • 在用UNION組合查詢時,只能用一條ORDER BY子句,跟在最後一條SELECT之後,實際上它可以來排序所有SELECT語句返回的所有結果
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;

注:上述例子是使用的相同的表。但使用UNION的組合查詢也可以應用不同的表

【MySQL必知必會】系列筆記:
【MySQL必知必會1-4章】學習筆記Day1
【MySQL必知必會5-7章】學習筆記Day2
【MySQL必知必會8-9章】學習筆記Day3
【MySQL必知必會10章】學習筆記Day4
【MySQL必知必會11-12章】學習筆記Day5
【MySQL必知必會13章】學習筆記Day6
【MySQL必知必會14-16章】學習筆記Day7

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章