0
SELECT * FROM Schools JOIN Masts on Schools.City = Masts.City

变成:

Schools ⋊ Masts = σSchools.city = masts.city SCHOOLS X MASTS

我对此是否正确?希望有人在接下来的 20 分钟左右快速回答。

4

1 回答 1

1

如果你没有这本书的副本:数据库专业人员的应用数学,你真的应该去看看。它极大地帮助了我解决这些问题。(精装本是一个真正的发现,但只有一个副本,而且太贵了——但也有软封面版本和电子书格式。)

另外,请查看这篇关于关系代数的非常好的Wikipedia文章。

上面的 Wikipedia 文章显示,您尝试完成的操作称为equijoin,它是 θ-join 的一种特殊形式。使用上面的示例,您应该输出以下内容:

让:

  • 学校→S;
  • 桅杆 → M
  • θ → =

然后:

S ⨝ θ M → σ θ (S × M)

在《数据库专业人员的应用数学》一书中,作者使用“低级”关系代数来定义 SQL JOIN。定义如下:

让:

  • 学校 → S
  • 桅杆 → M

然后:

{ 小号 ∪ 米 | s∈S ∧ m∈M ∧ s(City) = m(City) }

作者进一步使用运算符 ⊗ 对上述内容进行了一般定义(也许他们更容易发布该符号而不是使用传统的 ⨝ 符号——虽然没有意义,因为他们确实使用了 Latex——但是我会坚持使用传统符号):

R ⨝ θ T → { r ∪ t | r∈R ∧ t∈T ∧ " rt兼容" }

兼容性是“用户定义的”,因此 ⨝ θ。θ 可以是任何关系运算符、<、> 等。当测试两个属性是否相等作为连接条件成功的结果时,θ → =,如前所述,这是一个专门的 θ 连接,称为等值加入

所以,毕竟:

R ⨝ θ T → σ θ (R × T) → { r ∪ t | r∈R ∧ t∈T ∧ " rt兼容" }

我知道这比您发布的时间晚了 20 分钟,但希望有人觉得它有帮助。

于 2013-08-30T13:05:54.537 回答