【问题标题】:Is It Appropriate to use Venn Diagrams to Depict SQL Joins where the Tables are Sets?使用维恩图来描述表是集合的 SQL 连接是否合适?
【发布时间】:2023-03-09 01:22:01
【问题描述】:

网上搜索SQL join可以找到下图:

我们能否将其解释为Venn diagram,如下所示?

  • 标有表 A 的圆圈是表 A 中的记录集
  • 标有表 B 的圆圈是表 B 中的记录集
  • 集合的交集代表内连接(也就是 SQL 中的连接)

动机

所示的图表以各种形式广泛出现在网络上,看起来非常像维恩图。所以第一个直觉是把它想象成一个维恩图。但是,尝试定义“Table A”和“Table B”集合的内容可能会卡住。

互联网上也有似乎有冲突的信息。这个问题希望有助于解决出现的一些冲突。一些网站认为我们不应该使用维恩图来解释连接:

虽然还有其他信息使用表 A 和 B 之间的维恩图来解释这些表上的连接,例如

【问题讨论】:

  • 考虑用您的奖金标记问题,要求版主将奖金移至此处(或取消它以免在此处造成混乱)。但解释清楚。你可以参考this meta question。但是这个问题只是询问对 1 Venn 标签的特定解释,而没有理由认为这些甚至是任何人在写作或阅读中使用过的解释。所以目前尚不清楚这是否是您想要回答的问题。并且对于内部与外部有一个有效的维恩。祝你好运。
  • 谢谢@philipxy。是你们的 cmets 让我看到了曙光:在这个已经很混乱的问题上加分可能是个坏主意。但是,我不愿意为我自己的问题带来好处,因为它似乎有点吸引注意力。这个问题已经回答了,所以就像说“嘿,伙计们,看看我的好答案!请投票,这样我就可以收回我在奖金上失去的一些代表”另外,我还有其他问题要问并回答这个问题。这当然不是结束。

标签: sql join inner-join outer-join


【解决方案1】:

没有。如果要表示连接,则该图不能解释为维恩图。让我们用一个反例来说明原因。让我们选择一个最小的反例以避免混乱。因此,让我们假设两个表都只有一列:ID。此外,我们假设两个表中只有两条记录,并且它们都有相同的两条记录:只有 ID 1 和 2。所以两个表看起来像这样:

现在,假设我们运行以下 SQL:

select * from A join B

由于没有ON 子句,我们将返回A 中所有记录组合的表以及B 中的所有记录。由于每条记录有 2 条记录,我们将返回 4 = 2 * 2 记录。我们从选择中得到的表将如下所示,A 和 B 的 ID 列完全由表名限定:

然而,无论我们为记录选择何种解释,这两组记录的交集,如维恩图所示,并不等于这个。

解释#1:每条记录只是一个值的元组。在这种情况下,由于每个表中只有一列,我们的元组归结为单个值。由于我们的 ID 列是数字,因此这种解释归结为记录只是一个数字 ID。集合的交集是集合{1, 2} 与其自身的交集。这只是原始集。或者作为一个表格,交叉点是:

解释 #2: 表 A 中的每条记录都与表 B 中的任何记录或实际上表 A 本身中的任何其他记录完全不同。在这种情况下,由于没有两条记录是相同的,因此两个集合的交集将为空,即空集。所以作为一个表肯定不会和join的结果一样。

这证明了对维恩图的这种精确解释不能被视为表示 SQL 连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 2023-04-11
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多