SELECT * FROM Schools JOIN Masts on Schools.City = Masts.City
变成:
Schools ⋊ Masts = σSchools.city = masts.city SCHOOLS X MASTS
我对此是否正确?希望有人在接下来的 20 分钟左右快速回答。
SELECT * FROM Schools JOIN Masts on Schools.City = Masts.City
变成:
Schools ⋊ Masts = σSchools.city = masts.city SCHOOLS X MASTS
我对此是否正确?希望有人在接下来的 20 分钟左右快速回答。
如果你没有这本书的副本:数据库专业人员的应用数学,你真的应该去看看。它极大地帮助了我解决这些问题。(精装本是一个真正的发现,但只有一个副本,而且太贵了——但也有软封面版本和电子书格式。)
另外,请查看这篇关于关系代数的非常好的Wikipedia文章。
上面的 Wikipedia 文章显示,您尝试完成的操作称为equijoin,它是 θ-join 的一种特殊形式。使用上面的示例,您应该输出以下内容:
让:
然后:
S ⨝ θ M → σ θ (S × M)
在《数据库专业人员的应用数学》一书中,作者使用“低级”关系代数来定义 SQL JOIN
。定义如下:
让:
然后:
{ 小号 ∪ 米 | s∈S ∧ m∈M ∧ s(City) = m(City) }
作者进一步使用运算符 ⊗ 对上述内容进行了一般定义(也许他们更容易发布该符号而不是使用传统的 ⨝ 符号——虽然没有意义,因为他们确实使用了 Latex——但是我会坚持使用传统符号):
R ⨝ θ T → { r ∪ t | r∈R ∧ t∈T ∧ " r和t兼容" }
兼容性是“用户定义的”,因此 ⨝ θ。θ 可以是任何关系运算符、<、> 等。当测试两个属性是否相等作为连接条件成功的结果时,θ → =,如前所述,这是一个专门的 θ 连接,称为等值加入。
所以,毕竟:
R ⨝ θ T → σ θ (R × T) → { r ∪ t | r∈R ∧ t∈T ∧ " r和t兼容" }
我知道这比您发布的时间晚了 20 分钟,但希望有人觉得它有帮助。