专门的关系运算包括 [color=red]选择、投影、连接、除运算 [/color]等。
为了叙述上的方便,先引入几个记号。
(1)设关系模式为R(A1,A2,...,An)。它的一个关系设为R。t∈R表示t是R的一个元组。t[Ai]则表示元组t中相应于属性Ai的一个分量。
(2)若A={Ai1,Ai2,...,Aik},其中Ai1,Ai2,...,Aik是A1,A2,...,An中的一部分,则A称为属性列或属性组。t[A]=(t[Ai1],t[Ai2],...,t[Aik])表示元组t在属性列A上诸分量的集合。Ā则表示{A1,A2,...,An}中去掉{Ai1,Ai2,...,Aik}后剩余的属性组。
(3)R为n目关系,S为m目关系。Tr∈R,Ts∈S,Tr⌒Ts称为元组的连接(Concatenation)。它是一个n+m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。
(4)给定一个关系R(X,Z),X和Z为属性组。当t[X]=x是,x在R中的象集(ImagesSet)定义为:
Zx = {t[Z]|t∈R,t[X]=x}
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
如下图:
x1在R中的象集Zx1={Z1,Z2,Z3},
x2在R中的象集Zx2={Z2,Z3},
x3在R中的象集Zx3={Z1,Z3}
[img]http://dl2.iteye.com/upload/attachment/0121/3170/7474860a-c495-3ebb-a480-228ae3f2d0b0.jpg[/img]
--------------------------------------------------------------------------------------------------------------------------------------
下面给出这些专门的关系运算的定义:
[b]1.选择(Selection)[/b]
选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作
σf(R) = {t|t∈R∧F(t)='真'}
其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
逻辑表达式F的基本形式为
X1θY1
其中θ表示比较运算符,他可以是>,≥,<,≤,=或<>。X1,Y1 等式属性名,或为常量,或为简单函数;属性名也可以用它的序号来代替。在基本的选择条件上可以进一步进行逻辑运算,即进行求非(¬)、与(∧)、或(∨)运算。
选择运算实际上是从关系R中选取使逻辑表达式F为真的元组。这是从行的角度进行的运算。
【例1】 查询信息系(IS系)全体学生。
σSdept='IS'(Student)或σ5='IS'(Student)
其中下角标“5”为Sdept的属性序号。
【例2】 查询年龄小于20岁的学生。
σSage<20(Student)或σ4<20(Student)
[b]2.投影(Projection)[/b]
关系R上的投影是从R中选择出若干属性列组成新的关系。记作
∏A(R)={t[A]|t∈R}
其中A为R中属性列。
投影操作是从列的角度进行的运算。
【例3】 查询学生的姓名和所在系,即求Student关系上学生姓名和所在系两个属性上的投影。
∏Sname,Sdept(Student)或∏2,5(Student)
投影之后不仅取消了原关系中的某些列,而且还可能取消某些组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行。
【例4】 查询学生关系Student中都有哪些系,即查询关系Student上所在系属性上的投影。
∏Sdept(Student)
[b]3.连接(Join)[/b]
连接也称为θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
记作
R⋈S={Tr⌒Ts|Tr∈R∧Ts∈S∧Tr[A]θTs[B]}
其中A和B分别为R和S上度数相等且可比的属性组。θ是比较运算符。连接运算从R和S的笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上值满足比较关系θ的元组。
连接运算中有两种最为重要的也最为常用的连接,一种是等值连接(equijoin),另一种是自然连接(Natural join)。
θ为“=”的连接运算称为[color=red]等值连接[/color]。
它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的哪些元组,即[color=blue]等值连接[/color]为
[color=red] R⋈S = {Tr⌒Ts|Tr∈R∧Ts∈S∧Tr[A]=Ts[B]}[/color]
[color=red]A=B[/color]
[color=red]自然连接[/color](Natural join) 是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。即若R和S具有相同的属性组B,则[color=blue]自然连接[/color]可记作
[color=red] R⋈S = {Tr⌒Ts|Tr∈R∧Ts∈S∧Tr[B]=Ts[B]}[/color]
一般的连接操作是从行的角度进行运算。但自然连接还需要取消重复列,所以是同时从行和列的角度进行计算。
【例5】设图2.7(a)和(b)分别为关系R和关系S,图2.7(c)为一般连接R⋈S的结果,图2.7(d)为等值连接R⋈S的结果,图2.7(e)为自然连接R⋈S的结果。
[img]http://dl2.iteye.com/upload/attachment/0121/3219/6ad7bccf-caee-3f59-9801-00ab71b39aff.jpg[/img]
两个关系R和S在做自然连接时,选择两个关系在公共属性上值相等的元组构成新的关系。此时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,同样,S中某些元组也可能被舍弃。例如,在图2.7的自然连接中,R中的第4个元组,S中的第5个元组都被舍弃掉了。
如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),那么这种连接叫做外连接(outer join)。如果值把左边关系R中要舍弃的元组保留就叫做左外连接(LEFT OUTER JOIN 或 LEFT JOIN),如果只把右边关系S要舍弃的元组保留就叫做右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN)。在图2.8中,图(a)是图2.7中的关系R和关系S的外连接,图(b)是左外连接,图(c)是右外连接。
[img]http://dl2.iteye.com/upload/attachment/0121/3238/efb5f656-4af6-3ab4-8e4d-b2f2ba15fcd0.jpg[/img]
4.除运算(Division)
给定关系R(X,Y)和S(Y,Z),其中X、Y、Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作
R÷S={Tr[X]|Tr∈R∧∏y(S)⊆Yx}
其中Yx为x在R中的象集,x=Tr[X]。
除操作是同时从行和列角度进行运算。
【例6】设关系R、S分别为图2.9中的(a)和(b),R÷S的结果为图2.9(c)。在关系R中,A可以去4个值{a1,a2,a3,a4}。其中:
a1的象集为{(b1,c2),(b2,c3),(b2,c1)}
a2的象集为{(b3,c7),(b2,c3)}
a3的象集为{(b4,c6)}
a4的象集为{(b6,c6)}
S在(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)}
显然只有a1的象集(B,C)a1包含了S在(B,C)属性组上的投影,所以
R÷S={a1}
[img]http://dl2.iteye.com/upload/attachment/0121/3280/e1b24369-69ce-33c1-8838-f7b9b4a39fcb.jpg[/img]
【例7】查询至少选修1号课程和3号课程的学生号码。
首先建立一个临时关系K:
[img]http://dl2.iteye.com/upload/attachment/0121/3287/1f7fd9fa-21c1-3815-9a34-b75e8bee5754.jpg[/img]
然后求:
[img]http://dl2.iteye.com/upload/attachment/0121/3289/61c4f811-65c3-3c41-aaf6-261659005e2d.jpg[/img]
结果为{95001}。
为了叙述上的方便,先引入几个记号。
(1)设关系模式为R(A1,A2,...,An)。它的一个关系设为R。t∈R表示t是R的一个元组。t[Ai]则表示元组t中相应于属性Ai的一个分量。
(2)若A={Ai1,Ai2,...,Aik},其中Ai1,Ai2,...,Aik是A1,A2,...,An中的一部分,则A称为属性列或属性组。t[A]=(t[Ai1],t[Ai2],...,t[Aik])表示元组t在属性列A上诸分量的集合。Ā则表示{A1,A2,...,An}中去掉{Ai1,Ai2,...,Aik}后剩余的属性组。
(3)R为n目关系,S为m目关系。Tr∈R,Ts∈S,Tr⌒Ts称为元组的连接(Concatenation)。它是一个n+m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。
(4)给定一个关系R(X,Z),X和Z为属性组。当t[X]=x是,x在R中的象集(ImagesSet)定义为:
Zx = {t[Z]|t∈R,t[X]=x}
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
如下图:
x1在R中的象集Zx1={Z1,Z2,Z3},
x2在R中的象集Zx2={Z2,Z3},
x3在R中的象集Zx3={Z1,Z3}
[img]http://dl2.iteye.com/upload/attachment/0121/3170/7474860a-c495-3ebb-a480-228ae3f2d0b0.jpg[/img]
--------------------------------------------------------------------------------------------------------------------------------------
下面给出这些专门的关系运算的定义:
[b]1.选择(Selection)[/b]
选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作
σf(R) = {t|t∈R∧F(t)='真'}
其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
逻辑表达式F的基本形式为
X1θY1
其中θ表示比较运算符,他可以是>,≥,<,≤,=或<>。X1,Y1 等式属性名,或为常量,或为简单函数;属性名也可以用它的序号来代替。在基本的选择条件上可以进一步进行逻辑运算,即进行求非(¬)、与(∧)、或(∨)运算。
选择运算实际上是从关系R中选取使逻辑表达式F为真的元组。这是从行的角度进行的运算。
【例1】 查询信息系(IS系)全体学生。
σSdept='IS'(Student)或σ5='IS'(Student)
其中下角标“5”为Sdept的属性序号。
【例2】 查询年龄小于20岁的学生。
σSage<20(Student)或σ4<20(Student)
[b]2.投影(Projection)[/b]
关系R上的投影是从R中选择出若干属性列组成新的关系。记作
∏A(R)={t[A]|t∈R}
其中A为R中属性列。
投影操作是从列的角度进行的运算。
【例3】 查询学生的姓名和所在系,即求Student关系上学生姓名和所在系两个属性上的投影。
∏Sname,Sdept(Student)或∏2,5(Student)
投影之后不仅取消了原关系中的某些列,而且还可能取消某些组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行。
【例4】 查询学生关系Student中都有哪些系,即查询关系Student上所在系属性上的投影。
∏Sdept(Student)
[b]3.连接(Join)[/b]
连接也称为θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
记作
R⋈S={Tr⌒Ts|Tr∈R∧Ts∈S∧Tr[A]θTs[B]}
其中A和B分别为R和S上度数相等且可比的属性组。θ是比较运算符。连接运算从R和S的笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上值满足比较关系θ的元组。
连接运算中有两种最为重要的也最为常用的连接,一种是等值连接(equijoin),另一种是自然连接(Natural join)。
θ为“=”的连接运算称为[color=red]等值连接[/color]。
它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的哪些元组,即[color=blue]等值连接[/color]为
[color=red] R⋈S = {Tr⌒Ts|Tr∈R∧Ts∈S∧Tr[A]=Ts[B]}[/color]
[color=red]A=B[/color]
[color=red]自然连接[/color](Natural join) 是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。即若R和S具有相同的属性组B,则[color=blue]自然连接[/color]可记作
[color=red] R⋈S = {Tr⌒Ts|Tr∈R∧Ts∈S∧Tr[B]=Ts[B]}[/color]
一般的连接操作是从行的角度进行运算。但自然连接还需要取消重复列,所以是同时从行和列的角度进行计算。
【例5】设图2.7(a)和(b)分别为关系R和关系S,图2.7(c)为一般连接R⋈S的结果,图2.7(d)为等值连接R⋈S的结果,图2.7(e)为自然连接R⋈S的结果。
[img]http://dl2.iteye.com/upload/attachment/0121/3219/6ad7bccf-caee-3f59-9801-00ab71b39aff.jpg[/img]
两个关系R和S在做自然连接时,选择两个关系在公共属性上值相等的元组构成新的关系。此时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,同样,S中某些元组也可能被舍弃。例如,在图2.7的自然连接中,R中的第4个元组,S中的第5个元组都被舍弃掉了。
如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),那么这种连接叫做外连接(outer join)。如果值把左边关系R中要舍弃的元组保留就叫做左外连接(LEFT OUTER JOIN 或 LEFT JOIN),如果只把右边关系S要舍弃的元组保留就叫做右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN)。在图2.8中,图(a)是图2.7中的关系R和关系S的外连接,图(b)是左外连接,图(c)是右外连接。
[img]http://dl2.iteye.com/upload/attachment/0121/3238/efb5f656-4af6-3ab4-8e4d-b2f2ba15fcd0.jpg[/img]
4.除运算(Division)
给定关系R(X,Y)和S(Y,Z),其中X、Y、Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作
R÷S={Tr[X]|Tr∈R∧∏y(S)⊆Yx}
其中Yx为x在R中的象集,x=Tr[X]。
除操作是同时从行和列角度进行运算。
【例6】设关系R、S分别为图2.9中的(a)和(b),R÷S的结果为图2.9(c)。在关系R中,A可以去4个值{a1,a2,a3,a4}。其中:
a1的象集为{(b1,c2),(b2,c3),(b2,c1)}
a2的象集为{(b3,c7),(b2,c3)}
a3的象集为{(b4,c6)}
a4的象集为{(b6,c6)}
S在(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)}
显然只有a1的象集(B,C)a1包含了S在(B,C)属性组上的投影,所以
R÷S={a1}
[img]http://dl2.iteye.com/upload/attachment/0121/3280/e1b24369-69ce-33c1-8838-f7b9b4a39fcb.jpg[/img]
【例7】查询至少选修1号课程和3号课程的学生号码。
首先建立一个临时关系K:
[img]http://dl2.iteye.com/upload/attachment/0121/3287/1f7fd9fa-21c1-3815-9a34-b75e8bee5754.jpg[/img]
然后求:
[img]http://dl2.iteye.com/upload/attachment/0121/3289/61c4f811-65c3-3c41-aaf6-261659005e2d.jpg[/img]
结果为{95001}。