0

这是我在一次采访中得到的一个问题。他们让我描述以下 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'

我的答案-第一个是内连接,第二个是左连接。因此,第一个查询将只返回两个表中的匹配记录,第二个查询将返回两个表中的匹配记录以及左表中的所有记录。

他们的答案 - 前 2 个查询将返回相同的结果。第三个查询将作为内部连接执行

谁能解释这是怎么发生的……???

提前致谢

4

2 回答 2

3

让我们分解一下:

  • 查询 1 是内连接;JOIN本身与INNER JOIN. 为面试官敲击 1。

  • 查询 2 和 3 都是外连接。即使WHERE#2 中有一个子句,而#3 中有一个额外的JOIN子句,它也是针对父表的,并且不会从子表中过滤掉任何内容。为面试官敲击 2 和 3。

要么他们在测试你,看你是否会为你的答案辩护,要么他们不懂 SQL,要么你记错了。

于 2013-02-22T16:22:48.420 回答
0

如果您要问面试官怎么会错得如此之大,而不是问您是否正确,那么这可能更适合 SE 中的 The Workplace。

我也遇到过类似的情况,面试的招聘经理不是技术人员,而是向技术人员咨询了要问 RE:RDBMS 和其他主题的问题类型。结果,经理对技术概念的掌握并不出色。

我也听过很多面试的故事,面试官会故意引诱申请人,提供错误的答案,或者多次问同一个问题,只是为了看看申请人会如何处理这种情况。

于 2013-02-22T17:10:31.953 回答