• 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        是一个表满足条件的行,和另一个表的所有行。

  • 相关阅读:
    第12组 Alpha冲刺(4/6)
    第12组 Alpha冲刺(3/6)
    第12组 Alpha冲刺(2/6)
    第12组 Alpha冲刺 (1/6)
    第12组(78) 需求分析报告
    第12组(78)团队展示
    结对编程作业
    第06组Beta冲刺(2/5)-(组长)
    第06组Beta冲刺(1/5)-(组长)
    第06组Alpha冲刺(6/6)-(组长)
  • 原文地址:https://www.cnblogs.com/isoftware/p/3763736.html
Copyright © 2020-2023  润新知