仅使用基本运算符就可以很好地表达聚合函数。这是一件很整洁的事情。@H_403_1@
假设我们有一个表T,我们想找到其“值”字段的最大值。首先,我们应该将T的笛卡尔积与自身- 或更确切地说,将其与副本T2进行比较。然后,我们选择T.value小于T2.value的行:这将为我们排除所有 不需要的 行,这些行的值小于某些其他行的值。为了获得最大值,我们应该从所有行集中减去这些不需要的行。就是这样。至少这是基本思想,我们还需要使用投影来正确确定尺寸。@H_403_1@
不幸的是,我不知道如何在此处插入Latex,但是使用关系代数表示法,可能是这样的:@H_403_1@
蟺(T.a1...Tan, T.value)(T)
-
蟺(T.a1...Tan, T.value)(
蟽(T.value<T2.value)( 蟻(T, T2) x T )
)
其中蟺是投影算子,-是集合差,蟽是选择算子,而ant是重命名算子。@H_403_1@
SELECT T.* FROM T
MINUS
SELECT T.* FROM T, T as T2 WHERE T.value<T2.value
更实际的是:@H_403_1@
SELECT T.* FROM T LEFT JOIN T as T2 ON T.value<T2.value WHERE T2.value IS NULL
当然,所有这些主要只是学术上的兴趣,即表明关系代数是 有效的 。@H_403_1@