“关系代数”有许多变体,甚至不同关系是什么。你需要告诉我们你应该使用哪一个。
此外,您还没有解释为什么一对RA & SQL查询的含义是“彼此具有相同形式”或“相同”。 (较早的版本。)Same result? Or also some kind of parallel structure?
而且你不解释什么是“获取客户名单”的意思。什么属性做的结果是什么?
如果您尝试写的count
你想 - 什么时候请输入&它的基础上输出,在σ count(IdClient)>1 (...)
使用的定义 - 你会看到,你不能。那种只需要属性的count
不对应于关系运算符。它用于分组表达式中 - 你错过了。这种count
& group
实际上并没有关系运算符,它们在所谓的关系代数是真正的查询语言,通过SQL辩护设计的无终端,这很容易映射SQL到关系代数,但乞讨如何,我们的问题在代数中聚合。不过,也许这就是你被告知使用的那种“关系代数”。
我看到了使用计数的()有https://cs.stackexchange.com/questions/29897/use-count-in-relational-algebra
代数的本质是唯一的意义上,我们“用”经营者“与”其他运营商则通过运营商话费输出作为其他话务员呼叫的输入。 (因此,某些所谓的代数不是。)在您的链接答案中,分组运算符G
输入汇总名称count
和属性名称name
并影响输出。答案引用数据库系统概念,第5版:
G1, G2, ..., Gn G F1(A1), F2(A2), ..., Fm(Am) (E)
其中E是任何关系代数表达式; G1,G2,...,Gn构成一组属性列表;每个Fi是一个聚合函数;并且每个Ai是属性名称。
G
返回行具有属性G1, ..., A1, ...
其中一个或多个的行具有相同子行G1, ...
在E
并且每个Ai
保持从上Ai
过的那些行聚合Fi
输出。
但是,当您阅读&时,答案会使用该定义不正确。 (我得到了,因为它固定的。)正确的是:
π name (σ phone>1 (name G count(phone) (Person)))
这是明确的,如果你仔细阅读的定义。
G
具有误导性的语法。 count(phone)
不是运营商的呼叫;它只是一对参数,一个综合名称count
&属性名称phone
。更少误导性的语法将是
π name (σ phone>1 (name G count phone (Person)))
一个不需要分组操作员来编写您的查询。这使得了解考试中“关系代数”意味着什么更为重要。如果您不能使用分组操作符,则更难。
“Π Rental
似乎是一个阴凉的生意”还不清楚。你确实使用投影不正确;正确使用是π attributes (relation)
。我想你正在使用π
试图涉及像G
这样的分组运算符。重新“数学背后的逻辑”见this。
我返工我的问题,明天,因为它似乎需要全幅对焦理解。 –
如果您编辑,请不要使我的答案无效。我写它从我的意见,即使你的问题不清楚,所以我可以用它作为所有其他不清楚的问题不说,他们正在使用的代数,不要说什么“翻译/转换”是指参考,不要说他们想要的列和/或不理解语法。我可以添加任何你需要(如果你可以使用'count'&'group',我不知道更多你所需要的),但我认为它会更好,如果你问明了的回答和编辑一个新的,明确的问题在这里的链接(以避免downvotes&upvotes)。 PS编辑我的答案。 – philipxy