关系代数
2.1 基本运算(非常非常重要‼️)
关系代数是一种过程化查询语言。它包括一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果。关系代数基本运算有:选择、投影、并、集合差、笛卡尔积和更名。在基本运算以外,还有一些其他运算,即集合交、自然连接和赋值。
2.1.0 演式表
DEPT
EMP
SALGRADE
以上三个表分别为部门表,职员表,薪资等级表
2.1.1选择运算
选择运算选出满足给定谓词的元组,用
σ
\sigma
σ表示
σ
s
a
l
>
=
3000
(
E
M
P
)
\sigma_{sal >= 3000}(EMP)
σsal>=3000(EMP)
通常,我们允许在选择谓词中进行比较,使用的是
=
,
≠
,
<
,
≤
,
>
,
≥
=,\neq,<,\le,>,\ge
=,=,<,≤,>,≥另外我们可以用and、or和not将多个谓词合并成一个谓词
σ
s
a
l
>
=
3000
∧
d
e
p
t
n
o
=
20
(
E
M
P
)
\sigma_{sal >= 3000\wedge deptno = 20}(EMP)
σsal>=3000∧deptno=20(EMP)
2.1.2 投影运算
投影运算是一元运算,它返回作为参数的关系,但把某些属性排除在外。
Π
e
n
a
m
e
,
j
o
b
,
s
a
l
\Pi_{ename,job,sal}
Πename,job,sal
2.1.3关系运算的组合
运算关系的结果本身也是一个关系,由于关系代数的结果同其输入的类型一样,所以我们可以把多个关系代数运算组合成一个关系代数表达式。
Π e n a m e , j o b , s a l ( σ s a l > = 3000 ∧ d e p t n o = 20 ( E M P ) ) \Pi_{ename,job,sal}(\sigma_{sal >= 3000\wedge deptno = 20}(EMP)) Πename,job,sal(σsal>=3000∧deptno=20(EMP))
2.1.4 并运算
当我们需要出现在这两个集合之一的或同时出现在这两个集合中的时候,我们可以通过二元运算并。用
⋃
\bigcup
⋃表示。
Π
e
n
a
m
e
,
j
o
b
,
s
a
l
(
σ
s
a
l
>
=
3000
∧
d
e
p
t
n
o
=
20
(
E
M
P
)
)
\Pi_{ename,job,sal}(\sigma_{sal >= 3000\wedge deptno = 20}(EMP))
Πename,job,sal(σsal>=3000∧deptno=20(EMP))
⋃
Π
e
n
a
m
e
,
j
o
b
,
s
a
l
(
σ
s
a
l
<
=
1550
∧
d
e
p
t
n
o
=
20
(
E
M
P
)
)
\bigcup\Pi_{ename,job,sal}(\sigma_{sal <= 1550\wedge deptno = 20}(EMP))
⋃Πename,job,sal(σsal<=1550∧deptno=20(EMP))
2.1.5集合差运算
用-表示的集合差运算使得我们可以找出一个在关系中而不在另一个关系中的那些元组。
Π
e
n
a
m
e
,
j
o
b
,
s
a
l
(
σ
s
a
l
>
=
3000
(
E
M
P
)
)
−
\Pi_{ename,job,sal}(\sigma_{sal >= 3000}(EMP))-
Πename,job,sal(σsal>=3000(EMP))−
Π
e
n
a
m
e
,
j
o
b
,
s
a
l
(
σ
d
e
p
t
n
o
=
20
(
E
M
P
)
)
\Pi_{ename,job,sal}(\sigma_{ deptno = 20}(EMP))
Πename,job,sal(σdeptno=20(EMP))
2.1.6 笛卡尔积运算
用x表示的笛卡尔乘积,使得我们可以将任何两个关系的信息组合起来,我们将关系r1和r2的笛卡尔乘积写作r1 x r2;
2.1.7更名运算
关系代数表达式中的结果没有可供我们引用的名字,我们可以通过
ρ
\rho
ρ表示更名。
对给定的关系代数表达式E,
ρ
x
(
E
)
\rho_{x}(E)
ρx(E)返回表达式E中的结果,并把名字x赋给了它。
赋名运算的另一形式如下。假设关系代数表达式E是n元的,则表达式
ρ
x
(
A
1
,
A
2
,
.
.
.
.
A
n
)
(
E
)
\rho_{x(A_1,A_2,....A_n)}(E)
ρx(A1,A2,....An)(E)返回表达式E中的结果,并把名字x赋给了它,同时更名为
A
1
,
A
2
,
.
.
.
.
A
n
A_1,A_2,....A_n
A1,A2,....An
2.2关系代数的形式化定义
关系代数中基本的表达式是以下二者之一:
·数据库中的一个关系
·一个常数关系
2.3 附加的关系代数运算
2.3.1 集合交运算
交运算的表示:
⋂
\bigcap
⋂
用基本运算实现:r - (r-s)
2.3.2自然连接
自然连接自动判断相同名称的列,而后形成匹配。
自然连接的表示:
⋈
\bowtie
⋈
r
⋈
s
=
Π
R
∪
S
(
σ
r
.
A
1
=
s
.
A
1
,
r
.
A
2
=
s
.
A
2
,
.
.
.
,
r
.
A
n
=
s
.
A
n
r\bowtie s = \Pi_{R\cup S}(\sigma_{r.A_1=s.A_1,r.A_2=s.A_2,...,r.A_n=s.A_n}
r⋈s=ΠR∪S(σr.A1=s.A1,r.A2=s.A2,...,r.An=s.An(r x s)
)
)
)
2.3.3 赋值运算
有时候关系代数很复杂,我们可以用赋值的方式来表示。赋值运算用
←
\gets
←表示
重写自然连接:
temp1
←
\gets
← R x S;
t e m p 2 ← σ r . A 1 = s . A 1 , r . A 2 = s . A 2 , . . . , r . A n = s . A n temp2\gets\sigma_{r.A_1=s.A_1,r.A_2=s.A_2,...,r.A_n=s.A_n} temp2←σr.A1=s.A1,r.A2=s.A2,...,r.An=s.An(temp1)
result = Π R ∪ S \Pi_{R\cup S} ΠR∪S(temp2)
2.3.4 外连接运算
外连接是连接运算的扩展,可以处理缺失的信息
左外连接:在自然连接的基础上加上左边表上不包含自然连接中所含元组(行)的元组,用null值甜充右侧关系的属性。
右外连接:在自然连接的基础上加上有右边表上不包含自然连接中所含元组(行)的元组,用null值甜充左侧关系的属性。
全连接:左外连接 + 右外连接
2.4扩展的关系代数运算
2.4.1广义投影
广义投影,它允许在投影列表中使用算数运算和字符串函数等进行扩展广义投影运算形式为:
Π
F
1
,
F
2
,
.
.
.
,
F
n
(
E
)
\Pi_{F_1,F_2,...,F_n}(E)
ΠF1,F2,...,Fn(E)
其中E是任意关系代数表达式,而
F
1
,
F
2
,
.
.
.
,
F
n
F_1,F_2,...,F_n
F1,F2,...,Fn以及E的模式中属性的算术表达式
2.4.2 聚集
聚集函数输入值的一个汇集,将单一值作为结果返回。使用聚集函数对其进行操作的汇集中,一个值可以出现多次,值出现的顺序是无关紧要的。这样的汇集曾为多重集。
聚集运算(aggregationoperation)G通常的形式如下:
其中E是任意关系代数表达式(或者说是一个关系),
G
i
G_i
Gi是用于分组的一系列属性;每个
F
i
F_i
Fi 是一个聚集函数,每个
A
i
A_i
Ai 是一个属性名。运算含义如下,表达式E的结果中元组以如下方式被分成若干组
1.同一组中所有元组在
G
1
,
G
2
,
.
.
.
,
G
n
G_1,G_2,...,G_n
G1,G2,...,Gn的值相同
2.不同同组在
G
1
,
G
2
,
.
.
.
,
G
n
G_1,G_2,...,G_n
G1,G2,...,Gn的值不同
聚集运算是关系代数中的一类特殊操作,包括计数、求和、平均值、最大值、最小值等。以下是一些常见聚集运算的LaTeX表示方式:
计数操作 c o u n t ( R ) count(R) count(R) 其中, R R R代表关系名称。
求和操作
s
u
m
(
R
.
A
)
sum(R.A)
sum(R.A) 其中,
R
R
R代表关系名称,
A
A
A代表关系中的一个属性名称。
平均值操作
a
v
g
(
R
.
A
)
avg(R.A)
avg(R.A) 其中,
R
R
R代表关系名称,
A
A
A代表关系中的一个属性名称。
最大值操作
m
a
x
(
R
.
A
)
max(R.A)
max(R.A) 其中,
R
R
R代表关系名称,
A
A
A代表关系中的一个属性名称。
最小值操作
m
i
n
(
R
.
A
)
min(R.A)
min(R.A) 其中,
R
R
R代表关系名称,
A
A
A代表关系中的一个属性名称