left join 的困惑 ,SQL的估计执行计划有用没?????

rivey 2004-11-10 08:49:46
表1:t1
id area
2 fz
4 qz
5 qz
6 fz
7 fz
3 fz
表2:t2
id area
1 fz
3 fz
4 qz
5 fz
7 qz
表3:t3
id area
1 fz
2 fz
3 qz
4 qz
5 fz
6 fz

以上是我测试数据的三个简单表,
当我用left join 对三个表进行相连时,结果不尽相同,代码如下.

请教高手,SQL系统的left join 内部是怎么处理的? 它所添加的条件是怎么处理的??
SQL的执行过程 是按照它的估计执行计划执行吗??????????

select *
from t1 left join t2 on t1.id =t2.id
left join t3 on t1.id=t3.id

select *
from t1 left join t2 on t1.id =t2.id
left join t3 on t1.id=t3.id
where t2.area='fz' and t3.area='fz'

select *
from t1 left join t2 on t1.id =t2.id and t3.area='fz'
left join t3 on t1.id=t2.id and t3.area='fz'
...全文
159 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
davorsuker39 2004-11-10
  • 打赏
  • 举报
回复
肯定不一样的!select *
from t1 left join t2 on t1.id =t2.id
left join t3 on t1.id=t3.id

select *
from t1 left join t2 on t1.id =t2.id
left join t3 on t1.id=t3.id
where t2.area='fz' and t3.area='fz'-----这里比前面多了条件,除非t2,t3里面的area全部是'fz'差不多

select *
from t1 left join t2 on t1.id =t2.id and t3.area='fz'
left join t3 on t1.id=t2.id and t3.area='fz'
----这里是先打出条件过滤语句然后再连接另一个条件过滤,而上面哪个是先连接后过滤!还是那句话,也有可能出来结果一样,但是要满足很多条件的情况下的!
zjcxc 2004-11-10
  • 打赏
  • 举报
回复
1.执行计划反应的是一个大致的计划,并不一定准确
2.计划中看到的东西,并不代表SQL的内部运作也完全一样
rivey 2004-11-10
  • 打赏
  • 举报
回复
THANKS:zjcxc(邹建)

但是:SQL的执行计划中 2,3显示的却是先 执行的是过滤条件?或者执行过程不是按估计的执行计划???
zjcxc 2004-11-10
  • 打赏
  • 举报
回复
1与2,3当然不同,条件数都不一样

2,3也不同,2是在join的结果中再做条件过滤,而3是连接时的条件设置.
rivey 2004-11-10
  • 打赏
  • 举报
回复
补充一下: 如果有这方面的书籍推荐几本,更好 !!! thanks!

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧