T-SQL中连接的区别

时间:2013-02-22 16:03:26

标签: tsql left-join inner-join

这是我在接受采访时得到的一个问题。他们让我描述了以下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个查询将返回相同的结果。第三个查询将作为内部联接

执行

任何人都可以解释这是怎么发生的...... ???

提前致谢

2 个答案:

答案 0 :(得分:3)

让我们打破这个:

  • 查询1是内连接; JOIN本身与INNER JOIN相同。罢工1为面试官。

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

要么他们正在测试你,看看你是否会捍卫你的答案,他们不理解SQL,或者你记得错了。

答案 1 :(得分:0)

如果你问的是面试官怎么会这么错,而不是问你是否对,那么这可能更适合SE中的工作场所。

我处于类似的情况,招聘经理的招聘经理不是技术人员,并咨询技术人员询问RE:RDBMS和其他主题的问题类型。因此,经理对技术概念的掌握不是很好。

我也听过很多采访的故事,面试官会故意诱骗申请人,提供错误的答案,或多次提出同样的问题,只是看看申请人如何处理这种情况。