MySQL--操作簡記(聯結表,組合查詢(UNION))
阿新 • • 發佈:2019-02-17
聯結表
1.建立聯結
SELECT vend_name,prod_name,prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id
- 1
- 2
- 3
上面的語句與之前最大的區別在於,指定的列位於兩張表內,使用where進行聯結。
返回表vendors與表products中vend_id相等的vend_name,prod_name,prod_price
基於兩個表之間的相等測試,這種聯結稱為等值聯結,或內部聯結。對於這種聯結,還可以使用下面這種語法:
- INNER JOIN
ON
SELECT vend_name,prod_name,prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id
- 1
- 2
- 3
2.聯結多個表
SELECT vend_name,prod_name,prod_price, quantity
FROM vendors, products, order
WHERE vendors.vend_id = products.vend_id
AND order.prod_id = products.vend_id
AND order_num = 20005;
- 1
- 2
- 3
- 4
- 5
FROM後跟多個表,WHERE子句條件用AND連線。
3.聯結的其他型別
- 自聯結:在select語句中不止一次引用相同的表
- 自然聯結:至少有一個列出現在不止一個表中
- 外部聯結:聯結包含了在相關表中沒有關聯行的行
組合查詢
執行多個查詢(多條SELECT語句),並將結果作為但個查詢結果集返回。
1.建立組合查詢
UNION
例如,我想查詢價格小於10 或供應商名字為a的id號,即下面的兩段語句怎麼同時實現
SELECT order_id, order_price, order_name
FROM order1
WHERE order_price < 10;
- 1
- 2
- 3
SELECT order_id, order_price, order_name
FROM order1
WHERE order_name = 'a';
- 1
- 2
- 3
使用union組合:
SELECT order_id, order_price, order_name
FROM order1
WHERE order_price < 10
UNION
SELECT order_id, order_price, order_name
FROM order1
WHERE order_name = 'a';
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2.UNION規則
- 必須由兩條或兩條以上的select語句組成,每兩條之間用一個UNION分隔
- UNION中的每個查詢必須包含相同的列,表示式或聚集函式
- 列資料型別必須相容,型別不必完全相同,但必須是可以隱含轉換的型別
- 使用UNION滿足了條件後,可能會有條件滿足重複的,就會有重複,使用UNION ALL可以自動除去重複的行
3.對組合查詢結果排序
在使用UNION組合查詢時,只能使用一條ORDER BY子句,必須出現在最後一條SELECT語句之後