【发布时间】:2012-12-09 11:02:49
【问题描述】:
我在理解 sql 中的连接时遇到了麻烦,我想到了这张我认为可能对我有帮助的图片。问题是我不完全理解它。例如,图像右上角的连接,它将整个 B 圆圈涂成红色,但仅与 A 重叠。图像使圆圈 B 看起来像是 sql 语句的主要焦点,但 sql 语句本身,从 A 开始(从 A 中选择,加入 B),给我传达了相反的印象,即 A 将是 sql 语句的焦点。
同理,下图只包含了B圈的数据,那为什么join语句中包含A呢?
问题:从右上方顺时针工作并在中心完成,有人可以提供有关每个sql图像表示的更多信息,解释
a) 为什么在每种情况下都需要连接(例如,特别是在没有从 A 或 B 获取数据的情况下,即只有 A 或 B 而不是两者都是彩色的)
b) 以及任何其他可以阐明为什么图像是 sql 的良好表示的细节
【问题讨论】:
-
这可能对图表Visual Explanation of Joins 更有帮助,它包括表数据,并且还有关于每种连接类型的描述。
-
右上图中重要的是它是一个 RIGHT JOIN,因此 TableB 的所有数据(JOIN 语句的 右侧 的表)都将被包括在内,并且仅将包含与 TableB 中的 Key 匹配的 TableA 中的数据。
-
维恩图的问题是,一旦你理解了连接,它一开始看起来它们说明了,但如果你真的试图解释这样的图表意味着然后您会发现它很复杂,涉及未提及的 ON 条件,涉及不在任一操作数中的行,并且对于内部连接和外部连接的解释不同。 (特别是,虽然它们看起来像维恩图,但它们不解释为维恩图),即它们不说明更不用说解释.
-
PS 在What is the difference between “INNER JOIN” and “OUTER JOIN”? 上查看我的许多 cmets。有一个某些维恩图来说明左、右、全和内连接是如何相关的。
标签: mysql sql visualization set-theory