+ -
当前位置:首页 → 问答吧 → 关于inner join

关于inner join

时间:2011-11-06

来源:互联网

三个表A,B,C,有下面两个SQL
select * from A inner join B on A.id = B.id inner join on B.id = C.id
和select * from (A inner join B on A.id = B.id) inner join on B.id = C.id
这两个SQL有区别么?
可不可以这么理解:关于第一个SQL,A的每个记录去B里面查找有没有相同的ID,然后A,B两个表连接后的表再和C连接

作者: lys0412   发布时间: 2011-11-06

木有区别.
连接是哪个表,要根据连接表达式来看,比如后面有 b.id=c.id,那就是 b 表连到 c 表.

作者: qianjin036a   发布时间: 2011-11-06

查看执行计划可以看到是相同

加括号不是这样用的,是改变表的执行顺序



from a 
left join (b inner join c on b.ID=c.ID) on a.aid=c.aid

作者: roy_88   发布时间: 2011-11-06

引用 2 楼 roy_88 的回复:

查看执行计划可以看到是相同

加括号不是这样用的,是改变表的执行顺序



from a
left join (b inner join c on b.ID=c.ID) on a.aid=c.aid


加不加括号都不会影响结果,只是会影响表的连接顺序,可能优化的时候有用。对于最终的结果是没有不同的,这样理解对么?

作者: lys0412   发布时间: 2011-11-06

引用 3 楼 lys0412 的回复:

引用 2 楼 roy_88 的回复:

查看执行计划可以看到是相同

加括号不是这样用的,是改变表的执行顺序



from a
left join (b inner join c on b.ID=c.ID) on a.aid=c.aid


加不加括号都不会影响结果,只是会影响表的连接顺序,可能优化的时候有用。对于最终的结果是没有不同的,这样理解对么?

括号就是执行顺序.有括号先执行括号里面的.

作者: chirea   发布时间: 2011-11-06

应该没有区别吧

作者: muxingrenlgm   发布时间: 2011-11-06

你这个加括号和没加括号都应该是一样的

作者: fredrickhu   发布时间: 2011-11-06

引用 3 楼 lys0412 的回复:

引用 2 楼 roy_88 的回复:

查看执行计划可以看到是相同

加括号不是这样用的,是改变表的执行顺序



from a
left join (b inner join c on b.ID=c.ID) on a.aid=c.aid


加不加括号都不会影响结果,只是会影响表的连接顺序,可能优化的时候有用。对于最终的结果是没有不同的,这样理解对么?


加括号是改变表的执行顺序,对多表连接时有用,默认的表顺序连接,最终结果不会影响,当表连接用到 left join /right join时,加了括号影响结果集

作者: roy_88   发布时间: 2011-11-06

这个都一样的咯。

作者: houyajin   发布时间: 2011-11-06

引用楼主 lys0412 的回复:
三个表A,B,C,有下面两个SQL
select * from A inner join B on A.id = B.id inner join on B.id = C.id
和select * from (A inner join B on A.id = B.id) inner join on B.id = C.id
这两个SQL有区别么?
可不可以这么理解:关于第一个SQL,A的每个记……

从你的写法上来看没有区别.
但是建议把记录最少的表,放在最后,次之第二,最多者放最前面.
例如:c<b<a,那么你的写法是合适的,反之,则不一定合适.

作者: dawugui   发布时间: 2011-11-06