MySQL--操作簡記(聯結表,組合查詢(UNION))

bingguang1993發表於2018-04-03

聯結表

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語句之後

相關文章