【问题标题】:Difference between joins in T-SQL [closed]T-SQL中连接之间的区别[关闭]
【发布时间】:2013-02-08 07:28:54
【问题描述】:

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

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

提前致谢

【问题讨论】:

  • 要么你记错了查询,要么他们的答案有误。
  • 如果有业务逻辑表明有一组联系人详细信息,即内部业务逻辑,而不是技术知识,则查询 #1 和 #2 将返回相同的结果。第三个是内连接,因为 p.id = c.id,第三个实际上根据他们的回答确认了上面的业务逻辑。无论哪种方式,没有人尊重使用“连接”,它是“内连接”&通过绑定 pks 将左连接更改为内连接是一种愚蠢的技术,只有最不称职的 sql 开发人员才会使用。感觉好多了:)
  • 非常抱歉。我写的查询中有错误。我写了我记得的内容。我参考了你的一个线程并找到了问题..stackoverflow.com/questions/2119859/… .. ........非常感谢大家

标签: tsql left-join inner-join


【解决方案1】:

让我们分解一下:

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

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

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

【解决方案2】:

如果你是问面试官怎么会错得那么离谱,而不是问你是否正确,这可能更适合 SE 中的 The Workplace。

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

我还听过多个面试故事,其中面试官会故意通过提供错误答案或多次问同一个问题来诱骗申请人,只是为了看看申请人会如何处理这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2013-12-03
    • 2020-12-25
    • 2014-11-05
    • 2017-01-31
    • 2011-06-10
    相关资源
    最近更新 更多