left join 原理分析


left join 原理分析 [轉貼 2006-11-15 16:19:50]   
我頂  字號:  
 

案例分析

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是只在左表,不在右表的紀錄

 sql例子:

select employee.*, department.name as deptname
 from employee
 left  join department on employee.department = department.code
 where employee.isuse = '1'
  and employee.code = '3700000000'

 

結論:

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

LEFT  JOIN 等價於LEFT OUTER JOIN        是一個表滿足條件的行,和另一個表的所有行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM