我想知道代数关系中 GROUP BY、SORT BY 和 ORDER BY 的等效语句是什么?
我想知道代数关系中 GROUP BY、SORT BY 和 ORDER BY 的等效语句是什么?
在关系代数中,这两种操作都不可能实现,但是人们已经为这些操作创建了一些“扩展”(注:在原文中,部分文字是作为下标写的)。
根据数据库系统基础(Elmasri,Navathe 2011年第6版)一书所述,GROUP BY:
另一种无法用基本关系代数表达的请求类型是在数据库中的值集合上指定数学聚合函数。
...
我们可以使用符号ℑ(发音为脚本F)7定义一个AGGREGATE FUNCTION操作,以如下方式指定这些类型的请求:
<grouping attributes> ℑ <function list> (R)
其中 <grouping attributes> 是 R 中指定的关系属性列表,<function list> 是一个由 (<function> <attribute>) 对组成的列表。在每个这样的对中,<function> 是允许使用的函数之一,例如 SUM、AVERAGE、MAXIMUM、MINIMUM、COUNT,而 <attribute> 是 R 指定的关系属性。结果关系具有分组属性以及函数列表中每个元素的一个属性。
按顺序排序 (SORT BY),John L. Donaldson's lecture notes。
例如,表达式由于关系是集合(或袋),因此没有为关系定义排序。也就是说,如果两个关系包含相同的元组,则它们相同,无论其顺序如何。然而,用户经常希望查询的输出按某种特定顺序列出。我们可以定义一个额外的运算符 τ,如果我们愿意允许一个输出不是关系而是有序元组列表的运算符,则可以对关系进行排序。
π c1,c2,c3 (R)
其中,c1、c2 和 c3 是列(属性),R 是表(关系)。SELECT agents.agent_code, agents.agent_name, SUM(orders.advance_amount)
FROM agents, orders
WHERE agents.agent_code = orders.agent_code
GROUP BY agents.agent_code, agents.agent_name
ORDER BY agents.agent_code
τ agents.agent_code
γ agent_code, agent_name, SUM(advance_amount)
σ agents.agent_code = orders.agent_code (agents × orders)