【问题标题】:Difference between natural join and simple join on common attribute in algebra代数中公共属性的自然连接和简单连接的区别
【发布时间】:2018-11-15 08:26:08
【问题描述】:

我有点困惑。 假设有两个与共同属性 A 的关系。 现在是 (R natural join S)=(R join S where join condition A=A)? 自然连接返回一个公共列 A 由于集合论中定义的关系代数,简单连接是否返回具有相同名称 AA 的两列或 1 个公共列 A??

【问题讨论】:

  • 这取决于关系代数的定义。在某些书籍中,(正常)连接要求两个关系的属性具有不同的名称。因此,如果您想将一个表与其自身连接起来,首先您必须重命名两个操作数之一中的所有属性。
  • 没有“简单连接”。给出您正在谈论的“关系代数”的参考和/或定义。因为不止一个,它们甚至在关系上也有所不同。解释您所说的“简单连接”是什么意思。 SQL 内连接是 sql 的特定类型产品(“交叉连接”)和限制/选择(“on”)的组合。另外:“AA”是什么意思? “返回 AA 或 A”是什么意思?使用足够的单词、短语和句子来清楚地表达你的意思。 PS 集合论是一回事,而 RA 是另一回事。 RA 的定义可以用集合算术来给出,仅此而已。
  • 不是 sql。我说的是关系代数。我已经编辑了这个问题。 @philipxy 说的够清楚了。
  • 谢谢@Renzo
  • 你没有在我的评论中解决任何问题。您的编辑涉及“AA”,但那是什么?告诉我们您的教科书并引用自然连接的定义并引用您所指的任何其他连接的定义并根据定义解释您认为等式的每一侧的样子并告诉我们您遇到的问题。

标签: relational-algebra relational set-theory natural-join


【解决方案1】:

有一个自然联接here 的示例。正如@Renzo 所说,有很多变体。而 SQL 又不同了。所以我会继续使用维基百科显示的内容。

最重要的是:连接条件适用于两个参数之间共有的所有属性。所以你需要说“与 A 的两个关系是它们的 only 共同属性”。在该维基百科示例中,唯一的共同属性是 DeptName。一般来说,可以有许多共同的属性。

是的,连接意味着通过将参数中在相应公共属性中具有相同值的元组配对,在结果中形成元组。因此,您具有具有相同属性名称的相同值。在结果中重复这两个属性是没有意义的,因为你会重复这些值。该示例显示结果中有一个属性 DeptName

请注意,关系代数的不同方言使用不同的符号和符号。因此,Natural Join 的裸领结 (⋈) 可以后缀为布尔条件,形成 theta-join (θ-join) or equi-join - 参见该示例。布尔条件位于不同名称的属性之间,并且可以使用任何比较运算符。所以属性名称和它们的值都会出现在结果中。

集合论操作适用,因为每个元组都是一组名称-值对。结果元组是来自每个参数的元组的联合——前提是该联合是有效的元组。也就是说,提供同名的 n-v 对具有相同的值。

【讨论】:

  • 将提问者发送到 RA 定义而不是询问他们的定义并没有多大意义,因为 RA 有非常不同的变体。例如,您提供的链接给出了一个不常见的 theta-join 定义,该定义被硬塞到 RA 中,标题作为属性集,自然连接作为基本连接,但 theta-join 属于 RA,标题作为属性列表,产品作为基本连接。例如,您提供的链接 not 具有“属性名称及其值都出现在结果中”,它说“仅当 S 和 R 的标题不相交时才定义 θ-join”。跨度>
猜你喜欢
  • 2012-01-31
  • 2011-12-13
  • 2023-03-29
  • 2014-12-08
  • 2010-10-14
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多