學習筆記,以代碼和例子堆砌而成,方便查閱。
參考書籍:《Mysql必知必會》等
要點:UNION、UNION ALL
此Blog會用到下面2個表.
temp_product2:
# id, pr_id, pro_name, price
'1', '1001', 'Dog', '2000'
'2', '1001', 'Cat', '1500'
'3', '1002', 'Bunny', '100'
'4', '1002', 'Bird', '200'
'5', '1003', 'Fish', '50'
temp_product3:
# id, pr_id, pro_name, price
'1', '1002', 'Pen', '60'
'2', '1002', 'Book', '50'
'3', '1002', 'Rule', '10'
'4', '1003', 'Apple', '5'
'5', '1003', 'Orange', '3'
'6', '1005', 'Toy', '5000'
- 不包含重複行的組合查詢
涉及一個表:
SELECT pr_id, pro_name, price
FROM temp_product3 WHERE price<50
UNION
SELECT pr_id, pro_name, price
FROM temp_product3 WHERE pr_id=1002;
查詢結果:
# pr_id, pro_name, price
'1002', 'Rule', '10'
'1003', 'Apple', '5'
'1003', 'Orange', '3'
'1002', 'Pen', '60'
'1002', 'Book', '50'
涉及兩個表:
SELECT pr_id, pro_name, price
FROM temp_product3 WHERE price<50
UNION
SELECT pr_id, pro_name, price
FROM temp_product2 WHERE pr_id=1001;
查詢結果:
# pr_id, pro_name, price
'1002', 'Rule', '10'
'1003', 'Apple', '5'
'1003', 'Orange', '3'
'1001', 'Dog', '2000'
'1001', 'Cat', '1500'
- UNION規則
①UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔。
②UNION中的每個查詢必須包含相同的列,表達式或聚集函數。
③列的數據類型不需要完全相同,但必須兼容。
- 包含重複行的組合查詢
SELECT pr_id, pro_name, price
FROM temp_product3 WHERE price<50
UNION ALL
SELECT pr_id, pro_name, price
FROM temp_product3 WHERE pr_id=1002;
查詢結果:
# pr_id, pro_name, price
'1002', 'Rule', '10'
'1003', 'Apple', '5'
'1003', 'Orange', '3'
'1002', 'Pen', '60'
'1002', 'Book', '50'
'1002', 'Rule', '10'
- 對組合查詢結果進行排序
SELECT pr_id, pro_name, price
FROM temp_product3 WHERE price<50
UNION
SELECT pr_id, pro_name, price
FROM temp_product3 WHERE pr_id=1002
ORDER BY price;
查詢結果:
# pr_id, pro_name, price
'1003', 'Orange', '3'
'1003', 'Apple', '5'
'1002', 'Rule', '10'
'1002', 'Book', '50'
'1002', 'Pen', '60'
注意!在用UNION組合查詢時,只能使用一條ORDER BY子句,它必須出現在最後一條SELECT語句之後。