关系代数
关系代数中基本的表达式是如下二者之一:数据库中的一个关系,一个常数关系。关系代数中一般的表达式是由更小的子表达式构成,设
E1
和
E2
是关系代数表达式,则
E1∪E2
,
E1−E2
,
E1×E2
,
σp(E1)
,
Πs(E1)
,
ρx(E1)
都是关系代数表达式
是过程化查询语言
基本运算
选择: σp(r)={t|t∈r and p(t)}
- 选择谓词
p
中可以使用
= , ≠ , > ,≥ , < <script type="math/tex" id="MathJax-Element-39"><</script>, ≤ , and(∧) , or(∨) , not(¬) 将多个谓词合并成一个较大的谓词
投影: ΠA1,A2,…,An(r)
- 由于关系是一个集合,所以所有重复的行均被去除
并: r∪s={t|t∈r or t∈s}
- 要使
r∪s
有意义(即r和s是相容的),需要下面两个条件同时成立
- 关系r和关系s必须是同元的,即属性的数目必须相同
- 对所有的i, r的第i个属性的域必须和s的第i个属性的域相同
集合差: r–s={t|t∈r and t∉s}
- 要使
r−s
有意义(即r和s是相容的),需要下面两个条件同时成立
- 关系r和关系s必须是同元的,即属性的数目必须相同
- 对所有的i, r的第i个属性的域必须和s的第i个属性的域相同
笛卡尔积: r×s={tq|t∈r and q∈s}
- 假设 r(R) 和 s(S )的属性是不相交的(即 R∩S=ϕ )
- 如果 r(R) 和 s(S) 的属性相交,则必须使用重命名
更名运算: ρx(A1,A2,...,An)(E)
- 返回表达式
E
的结果,并赋给名字x,同时将属性更名为
A1,A2,…,An
附加的运算——可以用基本运算表达
- 集合交: r∩s={t|t∈r and t∈s}=r–(r–s)
- 自然连接:
r⋈s=ΠR∪S(σr.A1=s.A1∧r.A2=s.A2∧…,∧r.An=s.An(r×s)),
,其中
R∩S={A1,A2,…,An}
- 交换律
- 结合律
- theta连接: r⋈θs=σθ(r×s)
- 外连接
- 左外连接: r ⟕ s=r⋈s∪(r−ΠR(r⋈s))×{null,null…,null}
- 右外连接: r⟖s=r⋈s∪({null,null…,null}×(s−ΠR(r⋈s))
- 全外连接: r⟗s=r⋈s∪()(r−ΠR(r⋈s))×{null,null…,null})∪({null,null…,null}×(s−ΠR(r⋈s)))
- 赋值运算:
temp←E1
- 只能对临时关系变量赋值
扩展的运算——扩展了关系代数的表达能力
- 广义投影:
ΠF1,F2,…,Fn(r)
-
Fi
可以包含
+
,
− , ∗ ,/ 代数运算和字符串串接
-
Fi
可以包含
+
,
- 聚集: G1,G2,…,Gn