为什么元组关系演算中需要量词?
可以说我有这个声明:
{S.sname | 学生中的 S 和(年级中存在 G)(Ss# = Gs#)};
为什么我不能只使用它呢?
{S.sname | 学生的 S 和年级的 G 和 Ss# = Gs#};
为什么元组关系演算中需要量词?
可以说我有这个声明:
{S.sname | 学生中的 S 和(年级中存在 G)(Ss# = Gs#)};
为什么我不能只使用它呢?
{S.sname | 学生的 S 和年级的 G 和 Ss# = Gs#};
查询返回相同的值。但是在第二个例子中,你也可以要求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
假设我们在关系上定义了以下运算符:保存行 where保存行 where
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