SQL JOINS - 我的研究中的报告存在冲突,还是我误解了?

时间:2015-05-19 19:43:57

标签: mysql join

我是一名新手,正在对SQL中的JOINS进行一些研究。我被引导到这个优秀的主题(Difference between INNER and OUTER joins),但它确实引出了一个关于我一直在做的其他研究的问题。

我最初的理解是左外连接返回左表中的所有数据,加上包括所有共享集(维恩的中间,重叠,交叉,选择一个术语),右外连接包括所有来自右侧表的数据,加上包括所有共享集......

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

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

....现在我各种各样的困惑。我很少/毫不怀疑撰写这些文章的人的聪明才智,但我自己却对此感到沮丧。左/右外连接实际上是否包含共享数据?或者它只包含没有匹配的数据?为什么这个看似简单的概念如此令人困惑?外星人存在吗?谁射杀肯尼迪?妈咪?!

*这里有一个注释,上述博客的作者确实包含了她不是一个无所不知的大师的免责声明......所以也许她错了?或者我只是不理解......

1 个答案:

答案 0 :(得分:3)

Ligaya Turmelle的文章是错误的。 LEFT JOINLEFT OUTER JOIN

之间没有区别

我也不认为杰夫实际上是在推荐博客,而是将使用维恩图的想法归功于该文章的联合。第一段以

结尾
  

然而,就像她发帖的评论者一样,我发现了维恩   图表与我的SQL中的SQL连接语法完全匹配   测试。 (emphisis补充说)

当你在杰夫的艺术作品中找到他所讨论的LEFT OUTER JOIN时,他会注意到

  

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