首页 > 数据库技术 > 详细

SQL: LEFT JOIN , RIGHT JOIN , INNER JOIN 区别 , on 和 where条件的区别

时间:2016-09-02 00:34:34      阅读:230      评论:0      收藏:0      [点我收藏+]

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

    例如如下两张表:

    A(aid int , aname char(10) )

    B(aid int , aname char(10) )

    对应数据:

    技术分享    技术分享 

    执行语句: select * from a LEFT JOIN  b on aid=bid     

    技术分享

    我的理解是, A左连接B , 先取A中的一条记录 , 根据on中的条件去匹配B表 ,  如果能匹配就连接为一条新的记录 , 如截图中的第3行 ; 如果不能匹配 , 就把A的记录和字段值都是null的B记录连接, 如截图的1 和 2行 .

    右连接类似: select * from a right JOIN b on aid=bid

    技术分享

    可见 , 前面的两张连接中返回的记录中on的条件不一定为真 , 因为连接条件的字段有可能是null 值

    而inner join :  select * from a  inner join b on aid =bid

    技术分享

    则保证了on条件的成立.

    所以在配合 left join/right join  on  和 where 使用的时候 , 会有所区别:
    例如 select * from a left join b on aid= bid and aid>3, 返回

    技术分享

    如果是  select * from a left join b on aid= bid where aid>3

    技术分享

    因为执行这种语句的时候 , 会生成临时表 , 这个临时表中的on 中的条件不一定为真, 因为有可能字段值是null ,

生成了临时表后就会根据where条件进行过滤, 所以返回的结果中where的条件一定会是真.

    

 

  

    

 

SQL: LEFT JOIN , RIGHT JOIN , INNER JOIN 区别 , on 和 where条件的区别

原文:http://www.cnblogs.com/coderbill/p/5831847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!