leftjoinon后边加and和加where的区别
table a(id, type):
id type
----------------------------------
1 1
2 1
3 2
table b(id, class):
id class
---------------------------------
1 1
2 2
sql语句1:select a.*, b.* from a left join b on a.id = b.id pe = 1;
sql语句2:select a.*, b.* from a left join b on a.id = b.id pe = 1;
sql语句3:select a.*, b.* from a left join b on a.id = b.id and b.class = 1;
sql语句1的执⾏结果为:
a.id a.type
b.id b.class
----------------------------------------
1 1 1 1
2 1 2 2
3 2
sql语句2的执⾏结果为:
a.id a.type
b.id b.class
----------------------------------------
1 1 1 1
2 1 2 2
sql语句3的执⾏结果为:
a.id a.type
b.id b.class
----------------------------------------
1 1 1 1
2 1
sql left join 多表连接3 2
由sql语句1可见,left join 中左表的全部记录将全部被查询显⽰,on 后⾯的条件对它不起作⽤,除⾮再后⾯再加上where来进⾏筛选,这就是sql语句2了;由sql语句3可见,on后⾯的条件中,右表的限制条件将会起作⽤。
**********************************************************************************
sql语句4:select a.*, b.* from a inner join b on a.id = b.id pe = 1;
sql语句5:select a.*, b.* from a inner join b on a.id = b.id pe = 1;
sql语句6:select a.*, b.* from a, b where a.id = b.id pe = 1;
sql语句7:select a.*, b.* from a, b pe = 1 and a.id = b.id;
这四条语句的执⾏结果⼀样,如下:
a.id a.type
b.id b.class
----------------------------------------
1 1 1 1
2 1 2 2
由此可见,inner join 中on后⾯的限制条件将全部起作⽤,这与where的执⾏结果是⼀样的。另外,where语句与inner join确实能得到相同的结果,只是效率不同(这个我没有测试过,不过我相信这个结论)。
但是sql语句6是否⽐sql语句7的效率要低⼀些,我没有⾜够的数据量来测试,不过我也相信是如此的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论