初識MySQL(5)表的聯結

1.外鍵

表的聯結就是將兩個不同的表通過他們公共的列屬性合成一個表,方便我們對其中的屬性進行更進一步的操作,而在表的聯結的過程中就會出現一個我們之前沒有接觸過的概念:外鍵。
外鍵指的就是B表中的屬性中如果有A表的主鍵屬性,那麼稱這個屬性爲B表的外鍵。

2.創建聯結

現在假設有兩個表,vendors和products表,分別存儲供應商信息和產品信息,vend_id是vendors表的主鍵,也存在於products表中,也就是products表的外鍵,因此我們可以利用下列語句來進行表的聯結:

SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE
vendors.vend_id = products.prod_id;

以上語句表達的意思不難理解,就是通過vendors和products兩個表共有的屬性id作爲聯結兩個表的橋樑,聯結成一個總表,然後再查詢出需要的三個屬性。
記住,創建聯結的時候一定要有WHERE語句,不然會返回很多我們並不需要的數據。

到目前位置我們所使用的表的聯結方式都是等值聯結,即通過兩個表中的兩個共同的屬性的屬性值相等來建立兩個表之間的關係,聯結成一個大的表,這種聯結也稱爲內部聯結。但是我們可以使用內部聯結專有的表達方式來實現上面語句的功能:

SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON 
vendors.vend_id = products.prod_id;

創建聯結的時候並不一定只有兩個表,可以有多個表,這個時候的條件肯定也就不只一個,我們可以用AND排列所有的實現表的聯結操作的條件。

3.自聯結

自聯結顧名思義就是表自己與自己聯結,這個時候因爲聯結的是自己本身,因此就應該爲表設置別名,爲表設置別名的方式同樣是使用AS關鍵字來實現的。下面是一個需要運用自聯結的具體例子:
如果發現某一ID爲AA的產品存在問題,因此想知道生產該產品的供應商生產的其他物品是否也存在問題。此查詢要求首先找到生產該ID產品的供應商,然後找到這個供應商生產的其他產品。

SELECT prod_id,prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE
 prod_id = 'AA');

這是第一種實現的方法,他運用了子查詢。

SELECT p1.prod_id,p1.prod_name FROM products AS p1,products AS p2
WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'A';

這種方式採用的就是對於products的自連接,並分別命名爲p1和p2。

4.外部聯結

有時候我們需要在兩個表聯結的時候包括那些只出現在其中一個表中的行,這就成爲外部聯結。
例如我們有一張用戶表和一張訂單表,如果使用內部聯結,那麼沒有訂單的用戶永遠不會出現在聯結的表中,這個時候如果需要聯結的表中包含沒有訂單的用戶,就需要使用外部聯結。

SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON
customers.cust_id = orders.cust_id;

這與內部聯結的第二種表示方法類似,但是值得注意的是,使用外部聯結的時候需要指定LEFT還是RIGHT,意思就是選擇左邊的表的所有行還是右邊的表的所有行,這個時候我們需要的是所有的用戶而不是所有的訂單,所以當然應該使用左關聯。

發佈了15 篇原創文章 · 獲贊 0 · 訪問量 2934
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章