代数关系sql GROUP BY SORT BY ORDER BY

时间:2015-02-23 01:21:09

标签: sql group-by relational-database sql-order-by relational-algebra

我想知道代数关系中GROUP BY,SORT BY和ORDER BY的等价物是什么?

2 个答案:

答案 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是表(关系)