初識MySQL(5)表的聯結

2021-10-02 08:55:49 字數 1870 閱讀 9110

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

外鍵指的就是b表中的屬性中如果有a表的主鍵屬性,那麼稱這個屬性為b表的外來鍵。

現在假設有兩個表,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排列所有的實現表的聯結操作的條件。

自聯結顧名思義就是表自己與自己聯結,這個時候因為聯結的是自己本身,因此就應該為表設定別名,為表設定別名的方式同樣是使用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。

有時候我們需要在兩個表聯結的時候包括那些只出現在其中乙個表中的行,這就成為外部聯結。

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

select customers.cust_id,orders.order_num from customers left

outer

join orders on

customers.cust_id = orders.cust_id;

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

mysql 5 表設計思路

設計表是我們開發過程中必然要涉及到的步驟,想要乙個優秀的系統,表的設計是基礎,要是基礎沒設計好,那什麼sql語句優化,索引優化,都是杯水車薪 設計表我們一般從2個角度觸發考慮問題 正規化設計思想 物理設計正規化設計的三個標準 表的字段只能是單一的屬性 表的主鍵和其他非主鍵,是乙個一對一的關聯關係 表...

mysql5無法注入 mysql5注入

對mysql5注入時,可以直接查詢information schema中的tables表,快速找到所需的表段。同時可以利用group concat函式,得到你想得到的東西,不用limit乙個乙個猜。前面先轉轉別人的東西 and 1 2 union select 1,2,group concat us...

mysql 表的聯結

聯結是一種機制,用來在一條select語句中關聯表,因此稱之為聯結。聯結的建立非常簡單,規定要聯結的所有表以及它們如何關聯即可 對多個表都具有的列名,為了避免二義性需要使用完全限定列名。目前為止所用的聯結稱為等值聯結 equijoin 它基於兩個表之間的相等測試。這種聯結也稱為內部聯結。其實,對於這...