我想知道代数关系中GROUP BY,SORT BY和ORDER BY的等价物是什么?
答案 0 :(得分:14)
关系代数中也没有可能,但人们已经为这些操作创建了一些“扩展”(注意:在原始文本中,部分文本被写为下标)。
GROUP BY,根据数据库系统基础知识(Elmasri,Navathe 2011第6版):
在基本关系代数中无法表达的另一种类型的请求是 在数据库中的值集合上指定数学聚合函数。
...
我们可以使用符号ℑ定义一个AGGREGATE FUNCTION操作(发音为 脚本F)7,指定这些类型的请求如下:<分组属性> ℑ<功能列表> (R)
其中<分组属性>是R中指定的关系的属性列表,< function list>是(< function>< attribute>)对的列表。在每对这样的中, <作用>是允许的函数之一 - 例如SUM,AVERAGE,MAXIMUM, MINIMUM,COUNT-和<属性>是由R指定的关系的属性。结果关系具有分组属性加上函数列表中每个元素的一个属性。
ORDER BY(SORT BY),another source:
由于关系是集合(或包),因此没有为关系定义排序。也就是说,如果它们包含相同的元组,则两个关系是相同的,无论顺序如何。但是,用户经常希望以某种特定顺序列出查询的输出。如果我们愿意允许输出不是关系的运算符,而是有序的元组列表,我们可以定义一个额外的运算符τ来对关系进行排序。
例如,表达式
τLastName,姓(学生)
生成所有学生元组的列表,按LastName(作为主要排序键)排序,然后按FirstName(作为辅助排序键)排序。 (仅当两个元组在主排序键上达成一致时才使用辅助排序键。排序操作可以列出任意数量的排序键,从最重要到最不重要。)
答案 1 :(得分:2)
您可以将投影π用于您希望对其进行分组的列而不进行聚合(PROJECT操作会删除任何重复的元组) 如下:
πc1,c2,c3(R)
其中c1,c2,c3是列(属性),R是表(关系)