sql on和where条件的使用

使用join进行关联查询时,我们有可以使用on作为条件也可以使用where作为条件。但是两者是不同的。

SQL执行的顺序on是在join之前执行where是在前面两者之后执行。

我们以一个案例分析。

select * from student st left join score sc on sc.s_id = st.s_id and st.s_id = '01'

在这里插入图片描述
上面的sql我们对查询条件s_id有限制,但是这个限制却看似没有起作用。

起不了作用是不能的,不可能不起作用的。—窃格瓦拉

我们把条件去掉
在这里插入图片描述
看到区别了吧。右下角的数据在第一张图里是没有的。

其实原因如下:
student和score表做笛卡尔积后,on条件会对这个笛卡尔积做筛选,筛选出符合sc.s_id = st.s_id and st.s_id = '01'条件的记录。此时的结果如下:
在这里插入图片描述

之后进行join根据join的类型为left会保留前表未匹配的数据。也就是会补充下表方框中的数据。
在这里插入图片描述

以上就是问题的原因。

那有什么办法呢?
方案一:使用join。保留两表完全匹配的项。结果如下
在这里插入图片描述
方案二:使用where条件,对join后的表进行筛选。结果如下:
在这里插入图片描述

[end]

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值