SQL|where & and

本文介绍了SQL中on where和on and在连接查询时的区别,强调and仅作为连接词,where用于从句筛选。通过案例分析了在左连接中,where筛选整表,而on则在连接时指定条件。问题源于Coursera课程中的错误修正题目,涉及如何统计profile界面被浏览用户的比例,利用event_time和min函数识别并区分event_name的null和非null情况。

今天搞懂了on where 和 on and的区别,mark一下。其实本质上还是对and和where的本质要了解:and只是一个连接词,where是从句开头。

SELECT *
FROM table_a a LEFT JOIN table_b b
on a.id = b.id
where a.name = 'Lucy'


SELECT *
FROM table_a a LEFT JOIN table_b b
on a.id = b.id
and a.name = 'Lucy'

在上面两个代码中,第一个代码是指,a左连接b之后,where对整张表进行筛选,条件为a.name = 'Lucy',最后select出这张子表的所有数据。

第二个代码是说,a左连接b,条件是a.id = b.id且a.name = 'Lucy',最后select出全部数据。所以总体来说就是先对a进行筛选,再合并。

——————————————————————————————————————————

有这个问题的原因是今天看coursera的课程,然后在error correction那里这道题看不懂,所以和同学讨论了一下区别。

(图片来源cousera) 

这道题目的背景是,想要知道profile界面被浏览过的用户比例。

events表中记录了event,比如被他人浏览界面(view_user_profile)以及进行该活动的时间(event_time);user表中记录了user的id。解这道题的思路就是,先筛选出events表中被他人浏览界面的活动(event_name = 'view_user_profile'),然后与users表合并,此时有些user没有被浏览界面的话,event_name那里会显示NULL;而被浏览过的就会显示view_user_profile。

这个时候问题就变成,我们怎么将这个event_name为null和不为null的情况分开统计呢?因为不能用event_name,所以需要用b表中其他的变量来看空还是非空(毕竟event_name不满足条件的话整个数据都会是null),这里就用event_time来识别,用min函数的原因是用了group by,需要做聚合运算。

图中是要改正的源代码,这个跑出来的结果只有True;把where改成and就有True有False,是正确答案,原因可以看最上面的两个代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

砂锅咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值