关于在join中的on后面用where和and的有关问题

关于在join中的on后面用where和and的问题
SQL code
  select bl.LogMessage,bl.SystemDate,ncus.[user_name],bf.IsDelisting,bf.PName from B_PrjBaseInfo bf 
  join B_Log bl on bf.PID=bl.ProjectId
  join U_User us on us.UserID=bl.UserID
  join NCUserList ncus on ncus.[cuserid]=us.CuserID
  [color=#FF0000]where[/color] bl.LogType=3 and bf.IsDelisting=1

疑问上面的where换成and后运行结果一样。我想问一下它们在这条语句中应用的区别。谢谢!!!
是不是说明以后再用的过程中,不用考虑它们的问题了。??

SQL code
  select bl.LogMessage,bl.SystemDate,ncus.[user_name],bf.IsDelisting,bf.PName from B_PrjBaseInfo bf 
  join B_Log bl on bf.PID=bl.ProjectId
  join U_User us on us.UserID=bl.UserID
  join NCUserList ncus on ncus.[cuserid]=us.CuserID
  [color=#FF0000]and[/color] bl.LogType=3 and bf.IsDelisting=1



------解决方案--------------------
where换成and 执行速度会快一些

一个是将符合条件的数据直接联合起来,另一个选出全部数据再次筛选符合条件的
------解决方案--------------------
你这是内联接,所以where换成and,执行计划都是一样的。
如果是左右联接,那么where将在on后面执行,也就是on形成的结果集,再使用where来筛选,速度和结果集都不一样。
------解决方案--------------------
内联接,where和and的执行计划是一样的。
如果是左右联接,where在on后面执行,也就是对on形成的结果集再进行筛选,速度和效率是不一样的。
------解决方案--------------------
你这的join ...on 就相当于是inner join ....on 做连接操作
后面的where结果是一样的。如果你换为left join ...on 或者right....join .....on 
那where后面就不一样了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值