【问题标题】:SQL JOINS - Conflicting reports in my research, or have I misunderstood?SQL JOINS - 我的研究报告相互矛盾,还是我误解了?
【发布时间】:2015-07-31 19:41:39
【问题描述】:

我是一个新手,正在做一些关于 SQL 中的 JOINS 的研究。我被引导到这个出色的线程 (Difference between INNER and OUTER joins),但它确实让我想到了一个关于我一直在使用连接进行的其他研究的问题。

我最初的理解是Left Outer Join返回左表的所有数据,加上包括所有的shared-set(Venn的中间,overlap,crossover,pick一个term),Right Outer Join包括所有右侧表格中的数据,加上包括所有共享集...

...但我刚刚阅读了一篇博客(找到了 CodingHorror 推荐的链接http://www.khankennels.com/blog/index.php/archives/2007/04/20/getting-joins/http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/),上面写着:

“左外连接结合了左连接和外连接背后的思想。基本上——如果你使用左外连接,你会得到左表中没有右表匹配的记录。”

....现在我很困惑。我几乎/毫无疑问,写这些文章的人的聪明才智,但我自己对这一切都很愚蠢。 Left/Right Outer Join 实际上是否包含共享数据?还是仅包含不匹配的数据?为什么这个看似简单的概念如此令人困惑?外星人存在吗?谁射杀了肯尼迪?妈咪?!

*这里要注意,上述博客的作者确实包含免责声明,即她不是无所不知的大师……所以也许她错了?或者我只是不明白......

【问题讨论】:

  • 听起来像是一篇措辞不佳的文章。如果您想要一个明确的答案,为什么不创建一些测试表和查询,看看会发生什么?无论如何,您最初的理解是正确的,至少对于我曾经使用过的每个 RDBMS 而言。
  • 第二篇文章描述的是反半连接而不是外连接。他们在描述FROM A LEFT OUTER JOIN B ON A.C = B.C WHERE B.C IS NULL
  • 这是一个绝妙的主意,Tab,谢谢你——这将是巩固我理解的更好方法。 @Alex,我知道如果您需要将此标记为骗子,它与其他一些文章非常相似,尽管不完全相同。没问题 - 我看到的其他问题与博主的文章相冲突,但我想知道我是否误解了某些东西,因为她的文章被一位受人尊敬的编码员引用了。再次感谢您,如果您标记/删除,请不要担心。谢谢你们的帮助!
  • 我不认为我上次点击了那篇文章。在各种问题上都大错特错。

标签: mysql join


【解决方案1】:

来自 Ligaya Turmelle 的文章是错误的。 LEFT JOINLEFT OUTER JOIN没有区别

我也不认为 Jeff 实际上是在推荐该博客,而是将使用维恩图来描述文章连接的想法归功于此。第一段以

结尾

但是,就像她帖子的评论者一样,我发现维恩 图表与我的 SQL 连接语法不太匹配 测试。 (添加了重点)

当你得到 Jeff 的文章中他讨论 LEFT OUTER JOIN 的部分时,他会指出

为了只在表 A 中而不是在表 B 中生成记录集,我们 执行相同的左外连接,然后排除我们没有的记录 希望通过 where 子句从右侧。

【讨论】:

  • 也不存在与“NOT AND”等价的外连接。当然。那篇文章的错误多于正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 2011-10-30
相关资源
最近更新 更多