这是我在接受采访时得到的一个问题。他们让我描述了以下3种情景中的差异。
查询#1:
SELECT p.name, c.email
FROM PersonalDetails as p
JOIN ContactDetails c
ON p.id = c.id
WHERE p.region = 'UK'
查询#2
SELECT p.name, c.email
FROM PersonalDetails as p
LEFT JOIN ContactDetails c
ON p.id = c.id
WHERE p.region = 'UK'
查询#3:
SELECT p.name, c.email
FROM PersonalDetails as p
LEFT JOIN ContactDetails c
ON p.id = c.id AND p.region = 'USA'
我的回答 - 第一个是内连接,第二个是LEFT JOIN。因此,第一个查询将仅返回来自两个表的匹配记录,第二个查询将返回来自两个表的匹配记录和左表中的所有记录。
他们的答案 - 前2个查询将返回相同的结果。第三个查询将作为内部联接
执行任何人都可以解释这是怎么发生的...... ???
提前致谢
答案 0 :(得分:3)
让我们打破这个:
查询1是内连接; JOIN
本身与INNER JOIN
相同。罢工1为面试官。
查询2和3都是外连接。即使#2中有WHERE
子句,#3中有一个额外的JOIN
子句,它也是针对父表的,并且不会从子表中过滤掉任何内容。面试官罢工2和3。
要么他们正在测试你,看看你是否会捍卫你的答案,他们不理解SQL,或者你记得错了。
答案 1 :(得分:0)
如果你问的是面试官怎么会这么错,而不是问你是否对,那么这可能更适合SE中的工作场所。
我处于类似的情况,招聘经理的招聘经理不是技术人员,并咨询技术人员询问RE:RDBMS和其他主题的问题类型。因此,经理对技术概念的掌握不是很好。
我也听过很多采访的故事,面试官会故意诱骗申请人,提供错误的答案,或多次提出同样的问题,只是看看申请人如何处理这种情况。