【sql】面试题join on和where

本文探讨了SQL查询中LEFT JOIN时ON和WHERE子句的使用区别,强调了执行顺序:FROM -> JOIN -> ON -> WHERE -> GROUP BY等。LEFT JOIN与WHERE的组合在不同情况下会产生不同的结果。当在WHERE中过滤基表条件时,未关联的记录会被排除;而在ON中过滤,这些记录将保留并用NULL填充。通过一个面试题解析了两种写法的影响,解释了为何ON过滤会包含更多表A未关联但符合A表过滤条件的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点:sql执行顺序

from (去加载2个表 ) -> join -> on -> where -> group by->select 普通字段

聚合函数:count,sum -> having -> distinct -> order by -> limit

知识点:left join on和where的条件过滤区别

(以下只适用于left join,right join,full join,不适合inner join)

1、left join where + 基表过滤条件:先对基表执行过滤,然后进行left join;

2、left join where + 被关联表过滤条件:先执行left join,然后执行关联表的过滤条件;

3、left join on+基表过滤条件:满足过滤的基表记录执行left join,不满足的基表记录后面补null,然后两集合并一起;

4、left join on+被关联表过滤条件:先执行被关联表的过滤条件,然后执行left join;
 

面试题:表A数据在什么情况下相同,什么情况下不同?两种写法有什么区别?

    <--sql1:where过滤表B-->
SELECT
	a.*,
	b.* 
FROM
	acl_class AS a
	LEFT JOIN acl_object_identity AS b ON a.id = b.object_id_class 
WHERE
	a.num > 20 
	AND b.owner_sid = 'devaclsid410'

    <--sql2:on过滤表B-->
 select
	a.*,
	b.*
FROM
	acl_class AS a
	LEFT JOIN acl_object_identity AS b ON a.id = b.object_id_class AND b.owner_sid = 'devaclsid410'
WHERE
	a.num > 20 




解题分析:考察sql执行顺序,join on关联条件和where条件的区别

答案:

当表a无法和表b关联上的内容也,不符合where表a过滤条件时候,两边结果一样。

当表a未关联上表b的内容,有符合表a过滤条件的时候,两边结果不一样,on过滤会比where过滤条件b多出,表a未关联上但符合表a过滤条件的内容

因为sql执行顺序是先on后where,在on中进行表b过滤,表a与符合表b条件的内容进行关联,不会导致表a中未能关联上的内容过滤掉,但是where过滤中,表a中未关联上内容,表b字段为null,一定会被过滤掉


表a

表b

 表a b通过class来进行关联,表B中只有102班的数据,表a中符合大于20的除了102以外还有3条数据

sql1:where过滤 运行结果 6条 ab关联上且符合where条件b的

sql1 where过滤表B条件执行

  1.  jion结果是ab表关联内容+a表未关联上内容。
  2. where针对表b条件+表a条件过滤,a表关联不上的信息被过滤,只有关联上的信息,因为未关联信息,b表内容是null
  3. 最终结果是ab表关联连上切符合where 表a+表b条件的数据

sql2:on过滤 运行结果9(6+3)条 ab关联上且符合表b条件+ab未关联上但符合表a条件的

sql2 on过滤表B条件执行

  1. join结果是关联后是ab表关联且符合b表条件的内容+a表中未关联上的内容,
  2. 再进行针对a表的条件过滤
  3. 最终结果是ab关联上符合条件的数据+表a中未关联上表b但符合where 表a条件的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值