数据库系统概论--关系代数
来源:互联网 发布:开发php用什么软件 编辑:程序博客网 时间:2024/05/22 01:14
关系代数
关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方。式,它是用对关系的运算来表达查询的。
任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。所以运算对象、运算符、运算结果是运算的三大要素。
关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符,如表1所示。
表1 关系代数运算符
关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类。
其中传统的集合运算将关系看成元组的集合,其运算是从关系的“水平”方向即行的角度来进行。而专门的关系运算不仅涉及行而且涉及列。比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的。
一 传统的集合运算
传统的集合运算是二目运算,包括并、差、交、广义笛卡尔积四种运算。
设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个城,则可以定义并、差、交运算如下:
1. 并(Union)
关系R与关系S的并记作:
R∪S = { t | t∈R ∨ t∈S }
其结果仍为n目关系,由属于R或属于S的元组组成。
2. 差(Difference)
关系R与关系S的差记作:
R-S = { t | t∈R ∧ t/∈S }
其结果关系仍为n目关系,由属于R而不属于S的所有元组组成。
3. 交( Intersection)
关系R与关系S的交记作:
R∩S = { t | t∈R ∧t∈S }
其结果关系仍为n目关系,由既属于R又属于S的元组组成。关系的交可以用差来表示,即R∩S=R-(R-S)。
4. 广义笛卡尔积(ExtendedCartesian Product)
两个分别为 n目和m目的关系 R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。记作:
R×S = { trts| tr∈R ∧ts∈S }
图1(a)、图1(b)分别为具有三个属性列的关系R,S。图1(c)为关系R与S的并。图1(d)为关系R与S的交。图1(e)为关系R和S的差。图1(f)为关系R和S的广义笛卡尔积。
(a) (b)
(c) (d) (e)
(f)
图1 传统集合运算举例
二 专门的关系运算
专门的关系运算包括选择、投影、连接、除等。为了叙述上的方便,先引入几个记号。
(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上诸分量的集合。A则表示{A1,A2,…,An}中去掉{Ai1,Ai2,…,Aik}后剩余的属性组。
(3)R为 n目关系,S为 m目关系。tr∈R,ts∈S,trts 称为元组的连接(Concatenation)。它是一个 n+m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。
(4)给定一个关系R(X,Z),X和Z为属性组。定义,当t[X]=x时,x在 R中的象集(Images Set)为:
Zx={ t[Z] | t ∈ R,t[X] = x }
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
下面给出这些关系运算的定义:
1. 选择( Selection)
选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作:
бF(R)= { t | t ∈ R ∧ F(t) =’真’ }
其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
逻辑表达式F由逻辑运算符┐,∧,∨连接各算术表达式组成。算术表达式的基本形式为:
X1 θ Y1
其中θ表示比较运算符,它可以是>,≥,<,≤,=或≠。X1,Y1等是属性名,或为常量,或为简单函数;属性名也可以用它的序号来代替。
选择运算实际上是从关系R中选取使逻辑表达式产为真的元组。这是从行的角度进行的运算。
设有一个学生-课程数据库,包括学生关系Student、课程关系Course和选修关系SC,如图2所示。下面的许多例子将对这三个关系进行运算。
(a)
(b)
(c)
图2 学生-课程数据库
例1 查询信息系(IS系)全体学生
δSdept=’IS’(Student)
或 δ5=’IS’(Student)
其中下角标“ 5”为 Sdept的属性序号。结果如图3(a)所示。
例2 查询年龄小于20岁的学生
δSage<20(Student)
或 δ4<20(Student)
结果如图3(b)所示。
(a)
(b)
图3 选择运算举例
2. 投影(Projection)
关系R上的投影是从R中选择出若干属性列组成新的关系。记作:
πA(R)= { t[A] | t∈R }
其中A为R中的属性列。
投影操作是从列的角度进行的运算。
例3 查询学生的姓名和所在系,即求Student关系在学生姓名和所在系两个属性上的投影。
πSname, Sdept(Student)
或 π2, 5(Student)
结果如图4(a)。
投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行。
例4 查询学生关系Student中都有哪些系,即查询关系Student在所在系属性上的投影。
πSdept(Student)
结果如图 4(b)。Student关系原来有四个元组,而投影结果取消了重复的IS元组,因此只有三个元组。
(a) (b)
图4 投影运算举例
3. 连接( Join)
连接也称为θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作:
其中A和B分别为R和S上度数相等且可比的属性组。θ是比较运算符。连接运算从R和S的广义笛卡尔积R|×|S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组。
连接运算中有两种最为重要也最为常用的连接,一种是等值连接(equal-join),一种是自然连接(Natural-join)。
θ为“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组,即等值连接为:
自然连接(Natural-join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。即若R和S具有相同的属性组B,则自然连接可记作:
一般的连接操作是从行的角度进行运算。但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
例5 设图 5(a)和(b)分别为关系R和关系 S,图5(c)为的结果,图5(d)为等值连接的结果。图5(e)为自然连接R|×|S结果。
(a) (b) (c)
(d) (e)
图5 连接运算举例
4. 除( Division)
给定关系R(X,Y)和S(Y,Z),其中XY,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在 X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作:
其中Yx为x在R中的象集,x=tr{X}
除操作是同时从行和列角度进行运算。
例6 设关系 R,S分别为图6中的(a)和(b),R÷S的结果为图6(c)。
在关系R中,A可以取四个值{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}。
(a) (b) (c)
图 6 除运算举例
下面再以学生-课程数据库为例,给出几个综合应用多种关系代数运算进行查询的例子。
例7 查询至少选修1号课程和3号课程的学生号码。
首先建立一个临时关系K :
Cno
1
3
然后求: πSno,Cno(SC)÷K
结果为: { 95001 }
求解过程与例6类似,先对SC关系在Sno和Cno属性上投影,然后对其中每个元组逐一求出每一学生的象集,并依次检查这些象集是否包含K。
例8 查询选修了2号课程的学生的学号。
πSno,(бno=’2’(SC))={95001,95002 }
例9 查询至少选修了一门其直接先行课为5号课程的学生姓名。
πSname,(бCpno=’5’(Course)|×| SC |×|πSno,Sname(Student))
或
πSname,( πSno(бCpno=’5’(Course)|×| SC) |×|πSno,Sname(Student))
例10 查询选修了全部课程的学生号码和姓名。
πSno,Cno(SC) ÷ πCno(Course)|×| πSno,Sname(Student)
本节介绍了8种关系代数运算,其中并、差、笛卡尔积、投影和选择5种运算为基本的运算。其他3种运算,即交、连接和除,均可以用这5种基本运算来表达。引进它们并不增加语言的能力,但可以简化表达。
关系代数中,这些运算经有限次复合后形成的式子称为关系代数表达式。
关系代数语言中比较典型的例子是查询语言 ISBL(InformationSystem Base Language)。 ISBL语言由 IBM UnitedKingdom研究中心研制,用于 PRTV( Peterlee Relational Test Vehicle)实验系统。
- 数据库系统概论--关系代数
- 数据库系统概论学习笔记----讲3.关系代数
- 数据库系统概论——03——关系代数
- 【数据库系统概论】-关系数据库
- 数据库系统概论-002:关系数据库
- 【数据库系统概论】----关系数据库(一)
- 《数据库系统概论》---第二章 关系数据库
- 数据库系统基础教程一:关系数据库与关系代数
- 数据库系统概论-006: 关系数据理论
- 【数据库系统概论】-关系数据理论
- 【数据库复习】关系代数
- 数据库-关系代数
- 数据库关系代数
- 数据库之关系代数
- 数据库之关系代数
- 数据库关系代数
- 数据库关系代数
- 数据库关系代数除法
- 程序员之路
- HBase
- 在Matlab中实现透视变换的方法
- OfferKeyEventL()函数的响应
- Linux调度域负载均衡-设计,实现和应用
- 数据库系统概论--关系代数
- NetBeans 时事通讯(刊号 # 150 - Jun 11, 2011)
- Java-面向对象(上) 学习笔记
- 隐藏文件夹
- 努力奋斗
- android ultredit smali语法加亮
- POJ1042 Gone Fishing 贪心
- 如果每个Linux都是一个女人。。。
- AOSP: 下载 android 源码