[收藏]sql多表查询之一:Where 和 On的秘密

对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术。什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某几个字段进行互联管理的时候,这就不得不说说sql多表查询中Where 和 On的秘密。

 

在了解 sql多表查询中 Where 和 On的秘密之前,让我们先来温习一下连接基础吧


按列 a 把两表连接,请问各种连接方式的结果的结果?

语法呢?

左     select * from @a Aa left join @b Bb on Aa.a =Bb.a

右     select * from @a Aa right join @b Bb on Aa.a =Bb.a

内     select * from @a Aa join @b Bb on Aa.a =Bb.a

完全        select * from @a Aa full join @b Bb on Aa.a =Bb.a

迪卡尔     select * from @a,@b

是不是很简单呢,接下来我们来看sql多表查询中 Where 和 On的秘密:)

 

大家想想,依据下表

下面语句出来的结果是什么?

 

select * from @a _a left join @b _b on _a.id =_b.id where _b.name =1

select * from @a _a left join @b _b on _a.id =_b.id and _b.name =1

先想想,再看结果吧 ^_*

sql多表查询中 Where On 的秘密 SQLserver 中的执行顺序是: 先 join 后 where

所以,当条件写在 where 里,结果如下:

条件写在 on 里,结果如下:

Where On是不是很有趣, 你也试试吧!

 

下一个

请说出下面语句各返回多少记录

select * from @a a left join @b b on a.id =b.id where a.id =1

select * from @a a left join @b b on a.id =b.id and b.id =1

select * from @a a left join @b b on a.id =b.id and a.id =1

select * from @a a left join @b b on a.id =1

先想想,再看答案: P

—        select * from @a a left join @b b on a.id =b.id where a.id =1

 

—        原因是先执行连接条件 , 再执行 where 部分 , 所以只有 1 条记录

 

—        select * from @a a left join @b b on a.id =b.id and b.id =1

 

—        原因是满足 a.id =b.id and a.id =1 条件的只有一条 , 但 left join 是对没有附和条件的加 null 处理 , 所以最后结果是 3 条

 

—        select * from @a a left join @b b on a.id =b.id and a.id =1

 

—        原因是满足 a.id =b.id and a.id =1 条件的只有一条 , 但 left join 是对没有附和条件的加 null 处理 , 所以最后结果是 3 条

 

—        select * from @a a left join @b b on a.id =1

 

—        原因是在做完迪卡尔后 , 满足 a.id =1 条件的有 3 条 , 但 left join 是对没有附和条件的加 null 处理 , 所以最后结果是 5 条

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值