大数据 面试 SQL left join 测试结果

2024-01-08 15:49:15 浏览数 (2)

题目

上篇文章给大家处理一个小测试,未参与或者忘了题目内容的可以点击链接看下。

这个题目的正确答案为B,下面是大家选择结果,准确率为36%,说明大家还是忽略了一些基础知识的细节的。

我们可以看到,选择集中在B和C,差别点在结果是否包含“1,null”该行。

第一点:大家都能够确定的是t2.id肯定是NULL,说明大家对于on条件中的t1.id = 2 的关联条件,可以限制t2表的结果;

第二点:left join 中的on条件是关联条件,不限定左表数据,所以t1表中的所有数据都需要保留;

第三点:在真实需求下,期望得出C的结果是错写出该SQL,产出C结果的SQL如下:

代码语言:javascript复制
select
t1.id,
t2.id
from t1
left join t2
on t1.id = t2.id
where t1.id =2;

1.首先这个题目的SQL写法不是很常见,为了考察对应知识点特意在on条件中限定左表;

2.通常在做关联时,都是对原始表进行行列裁剪之后再进行关联,这样既可以减少关联计算涉及的数据量,也减少逻辑的复杂度,可读性更好.如果业务逻辑复杂上面的SQL出错的可能性还是比较高的,所以我通常的写法如下:

代码语言:javascript复制
select
	new_t1.id,
	new_t2.id
from
(
	select
		id
	from t1
	where t1.id=2
) new_t1
left join
(
	select
		id
	from t2
)new_t2
on new_t1.id = new_t2.id

3.群里的朋友也给出使用CETs的写法,在逻辑复杂的情况下会更加清晰,同样的也是先做行的裁剪。

代码语言:javascript复制
with new_t1 as
(
	select
		id
	from t1
	where t1.id=2
),
new_t2 as
(
	select
		id
	from t2
)
select 
 new_t1.id,
 new_t2.id
 from new_t1
 left join
 new_t2
 on new_t1.id = new_t2.id

0 人点赞