join 和 where的执行顺序

       引言:今天一同学问我,join后面跟where查询条件,查询的时候是先关联再筛选的还是先各自筛选了再关联的?开始也就凭感觉,应该是先关联再筛选吧!他问了问为什么呢?后来我也越想越纠结了,于是找了两个表试了试,终于得出结论...

  看sql:

  A表:
      id  name
       1   aa
       2   bb
 
   B表:
        id   name
        1     cc


     sql1:   select A.*,B.*  from    A   left  join B  on   A.id=B.id  where B.id<>1

       这时结果集是空的

  结果:

  id   name   id   name


        
 
     sql2:  select A.*,B.*  from    A   left  join (select *  from  B  where B.id<>1 )    on   A.id=B.id
         这时A的会全显示  B为空  结果:

    id   name   id   name

    1      aa

    2      bb

 

      从上面的sql可以看出,如果是先筛选再关联的话,那么sql1和sql2的结果集就应该是一样的,但事实并非如此,所以join后面跟where,是先关联再筛选,where是对整个结果集的一个筛选。

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值