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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL: LEFT JOIN , RIGHT JOIN , INNER JOIN 区别 , on 和 where条件的区别相关的知识,希望对你有一定的参考价值。

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

    例如如下两张表:

    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条件的区别的主要内容,如果未能解决你的问题,请参考以下文章

sql中left join、right join、inner join有啥区别

SQL SERVER LEFT JOIN, INNER JOIN, RIGHT JOIN

sql的left join right join inner join之间的区别

SQL语句(inner join,left out join,right out join三者的不同

sql server join ,inner join ,left join ,right join 的使用

sql语句中 left join,right join,inner join 的区别