为什么元组关系演算中需要量词? 让我们说我有这样的说法:
{S.sname |学生中的S和(等级中存在G)(S.s#= G.s#)};
为什么我不能只使用它呢?
{S.sname |学生中的S和成绩中的G和S.s#= G.s#};
答案 0 :(得分:2)
查询返回相同的值。但是在第二个例子中,你也可以要求学生G.grade
,而在第一个例子中你不能。元组关系演算表达式的右侧描述了一组元组,其中仅保留左侧的属性。这里两个右侧的表达式描述了不同的元组集,但是左侧的投影碰巧从两者中保留了相同的值。
之间的区别
r IN R AND EXISTS s IN S (
etc
)
r IN R AND s IN S AND
etc
是由第一个描述的关系仅具有R
的属性,而第二个描述的关系具有R
和...的属性。 S
。
假设具有属性T
的任何关系...
包含某些表达式T(...)
所包含的行。然后<...> IN T
当且仅当T(...)
。
然后我们可以将上面的两个关系描述为满足(分别)的元组
R(...) AND EXISTS
attributes in S & etc but not in R
(S(...) AND
etc
)
R(...) AND S(...) AND
etc
这种符号(或多或少)称为域关系微积分。
假设我们在关系上定义以下运算符:
PROJECT
some attributes of T
T
包含EXISTS
other attributes of T
T(...)
T NATURAL JOIN U
保留T(...) AND U(...)
然后我们可以将上面的两个关系描述为(分别)中的元组
R NATURAL JOIN PROJECT
attributes in S & etc also in R
(S NATURAL JOIN
etc
)
R NATURAL JOIN S NATURAL JOIN
etc
这种表示法称为Relational Algebra 。