萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql中一張表LEFT JOIN 左關聯兩張表語句

mysql中一張表LEFT JOIN 左關聯兩張表語句

在mysql中使用實現左關聯我們可直接使用LEFT JOIN 語句就可以了,下面來看看利用LEFT JOIN 實現左連接兩個表哦。

先看實例

 代碼如下 復制代碼

SELECT p.price, pd.name, m.manufacturers_name FROM (products p
           LEFT JOIN products_description pd ON p.products_id = pd.products_id)
           LEFT JOIN manufacturers m ON p.manufacturers_id = m.manufacturers_id


關於 “A LEFT JOIN B ON 條件表達式” 的一點提醒

ON 條件(“A LEFT JOIN B ON 條件表達式”中的ON)用來決定如何從 B 表中檢索數據行。

如果 B 表中沒有任何一行數據匹配 ON 的條件,將會額外生成一行所有列為 NULL 的數據

在匹配階段 WHERE 子句的條件都不會被使用。僅在匹配階段完成以後,WHERE 子句條件才會被使用。它將從匹配階段產生的數據中檢索過濾。


聯合查詢效率分析

user表:

id | name
---------
1 | libk
2 | zyfon
3 | daodao

user_action表:

user_id | action
---------------
1 | jump
1 | kick
1 | jump
2 | run
4 | swim

sql:

 代碼如下 復制代碼 select id, name, action from user as u
left join user_action a on u.id = a.user_id

result:
id | name | action
--------------------------------
1 | libk | jump ①
1 | libk | kick ②
1 | libk | jump ③
2 | zyfon | run ④
3 | daodao | null ⑤

分析:
注意到user_action中還有一個user_id=4, action=swim的紀錄,但是沒有在結果中出現,
而user表中的id=3, name=daodao的用戶在user_action中沒有相應的紀錄,但是卻出現在了結果集中
因為現在是left join,所有的工作以left為准.
結果1,2,3,4都是既在左表又在右表的紀錄,5是只在左表,不在右表的紀錄


結論:
我們可以想象left join 是這樣工作的
從左表讀出一條,選出所有與on匹配的右表紀錄(n條)進行連接,形成n條紀錄(包括重復的行,如:結果1和結果3),
如果右邊沒有與on條件匹配的表,那連接的字段都是null.
然後繼續讀下一條。

copyright © 萬盛學電腦網 all rights reserved