为啥叫内连接和外连接?
Posted
技术标签:
【中文标题】为啥叫内连接和外连接?【英文标题】:Why is inner join and outer join so called?为什么叫内连接和外连接? 【发布时间】:2015-01-28 11:16:02 【问题描述】:我了解内连接和外连接的工作原理。但是在这种情况下,内部/外部这两个词的含义是什么?什么是关于内部连接的内部?什么是外连接?
最好的问候, 维沙尔
【问题讨论】:
第一次使用视觉指南访问 Google:blog.codinghorror.com/a-visual-explanation-of-sql-joins Difference between INNER and OUTER joins的可能重复 是的,我在发布之前已经看过维恩图可视化。 这些可视化对我来说似乎不正确。 这些可视化对我来说似乎不正确。检查我标记为正确的答案以及我对克雷格的回复。请让我知道您对此的看法。 【参考方案1】:内连接将仅返回所有连接表中存在连接键的记录,或者换句话说,它将返回键位于连接表交集内的记录。钥匙在在那个交集处。外连接将返回交集内的所有记录,以及交集外部的记录。
这里是 Stack Overflow 上关于该主题的完整帖子:What is the difference between Left, Right, Outer and Inner Joins?
还有一个:What is the difference between "INNER JOIN" and "OUTER JOIN"?
实际上,我想您的问题是重复的。 ;-)
【讨论】:
关系代数基于集合论。在集合论中,交集是指两个集合之间的共同元素。在创建连接行时。如果第一个表中的行与第二个表中的多行匹配,则会创建多行。因此,我不明白为什么交集是一种直观的思考方式。检查以下我标记为正确的答案。虽然技术上它似乎是精确的。但这也意味着名称(内部/外部连接)基于实现而卡住。想知道你对此的看法。 嗯,我确实说过 keys 的交集。是的,当一个表中的键在另一个表中有多个匹配项时,会在结果集中创建额外的虚拟记录。但是您仍在查看两个表中键集相交的所有记录,而没有查看它们不相交的记录。 @user3123794 我认为,我接受的答案唯一真正的问题是它专注于实现(......内连接,外循环迭代这个......内循环迭代在那之上...创建复合行...)。实现可能会有所不同,而且我没有看到任何支持断言的参考书目。该答案中没有任何内容实际上涉及科布的关系代数,它只是谈论循环。关系代数不涉及外连接。我看不出接受的答案如何解释为什么内部联接是内部联接,而外部联接是外部联接。【参考方案2】:另一个视角:
最早的简单连接实现之一使用嵌套循环。
对于内连接,外循环将遍历任何关系,内循环将遍历另一个关系并在连接列匹配时创建复合行。因此,输出行在内部循环中创建和填充。因此,这称为 INNER JOIN。
1234563不匹配情况的外循环(左表在右表中没有基于连接列的匹配行)。这种情况下,左表需要去外循环,所以叫LEFT OUTER JOIN。当我们希望保留右侧关系\表中的所有行时,右侧表需要进入外循环,因此称为RIGHT OUTER JOIN。
当我们希望保留两个表中不匹配的行时,最简单的方法是使用两个嵌套循环。一个嵌套循环将在外循环中具有左表,而另一个嵌套循环将在外循环中具有右表。所以两个表都进入了外循环,因此它被称为 FULL OUTER JOIN。
将链接添加到讨论嵌套循环实现的论文:http://www.cs.berkeley.edu/~brewer/cs262/3-selinger79.pdf
【讨论】:
以上是关于为啥叫内连接和外连接?的主要内容,如果未能解决你的问题,请参考以下文章