数据库系统概论期末复习一:关系代数

关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。

关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类。

这部分在数据库系统概论课程中也是重点,会出至少10%的题目,个人觉得这部分内容有些概念很抽象,不太好理解,大家在复习的时候一定注意结合实例,多做做例题。

一.传统的集合运算

这一部分比较简单,我就不具实例了。

设关系R和S具有相同的目,且相同的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组。

R:

ABC
a1b1c1
a1b2c2
a2b2c1

S:

ABC
a1b2c2
a1b3c2
a2b2c1

1.并

关系R和关系S的并记作:R∪S={t|t∈R∨t∈S}

其结果仍为n目关系,由属于R或属于S的元组组成。

eg.R∪S

ABC
a1b1c1
a1b2c2
a2b2c1
a1b3c2

2.差

关系R和关系S的差记作:R-S={t|t∈R∧t∉S}

其结果仍为n目关系,由属于R而不属于S的元组组成

R-S:

ABC
a1b1c1

3.交

关系R和关系S的交记作:R∪S={t|t∈R∧t∈S}

其结果仍为n目关系,由既属于R由属于S的元组组成。关系的交可以用关系的差来表示,即:R∩S=R-(R-S)

R∩S:

ABC
a1b2c2
a2b2c1

4.笛卡儿积

这里是指广义的笛卡儿积。

两个分别是n目和m目的关系R和S的笛卡儿积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2 个元组,则关系R和S的笛卡儿积有k1×k2个元组。

R: n目关系,k1个元组

S: m目关系,k2个元组

R×S:

列:(n+m)列元组的集合 元组的前n列是关系R的一个元组 后m列是关系S的一个元组

行:k1×k2个元组

R.AR.BR.CS.AS.BS.C
a1b1c1a1b2c2
a1b1c1a1b3c2
a1b1c1a2b2c1
a1b2c2a1b2c2
a1b2c2a1b3c2
a1b2c2a2b2c1

a2

b2c1a1b2c2
a2b2c1a1b3c2
a2b2c1a2b2c1

二.专门的关系运算

先看一些概念

注:象集的本质是一次选择运算和一次投影运算

这之后就有些抽象了,结合书上的表作为实例

Student:

学号

Sno

姓名

Sname

性别

Ssex

年龄

Sage

所在系

Sdept

201215121李勇20CS
201215122刘晨19CS
201215123王敏18MA
201215125张立19IS

Course:

课程号

Cno

课程名

Cname

先行课

Cpno

学分

ccredit

1数据库54
2数学2
3信息系统14
4操作系统63
5数据结构74
6数据处理2
7PASCAL语言64

SC:

学号

Sno

课程号

Cno

成绩

Grade

201215121192
201215121285
201215121388
201215122290
201215122380

1.选择

选择又称为限制 (Restriction),含义是指在关系R中选择满足给定条件的诸元组

记作:

F表示选择条件,它是一个逻辑表达式, 取逻辑值“真”或“假” 。 逻辑表达式F的基本形式为:X1θY1,其 中θ表示比较运算符,X1 , Y1是属性名。

例1. 查询信息系(IS系)全体学生

例2. 查询年龄小于20岁的学生

2.投影

投影运算符的含义 :从R中选择出若干属性列组成新的关系

记作 πA(R) = { t[A] | t ∈R },其中A为R中的属性列

投影操作主要是从列的角度进行运算

投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

例3. 查询学生的姓名和所在系

例4:查询学生关系Student中都有哪些系

πSdept(Student)

3.连接

连接也称为θ连接

连接运算的含义 (Semantics): 从两个关系的笛卡 尔积中选取属性间满足一定条件的元组

记作:

连接运算从R和S的笛卡尔积R×S中选取R关系在 A属性组上的值与S关系在B属性组上值满足比较 关系θ的元组。

常用的连接运算有等值连接和自然连接

等值连接:

θ为“=”的连接运算称为等值连接,指从关系R与S的广义笛卡尔积中选取A, B属性值相等的那些元组。

自然连接:

自然连接是一种特殊的等值连接

① 两个关系中进行比较的分量必须是相 同的属性组 ② 在结果中把重复的属性列去掉

自然连接的含义 (Semantics) R和S具有相同的属性组B

注:一般的连接操作是从行的角度进行运算。自然连接还需要取消重复列,所以是同时从行和列的角度进行运算

除此之外,连接还有外连接,左外连接,右外连接之分

外连接:如果把舍弃的元组也保存在结果关系中,而在 其他属性上填空值(Null),这种连接就叫做外连 接 (OUTER JOIN)。

左外连接:如果只把左边关系R中要舍弃的元组保留就叫做 左外连接 (LEFT OUTER JOIN或LEFT JOIN)

右外连接:如果只把右边关系S中要舍弃的元组保留就叫做 右外连接(RIGHT OUTER JOIN或RIGHT JOIN)

例5:

4.除

给定关系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上投影的集合

注:除操作是同时从行和列角度进行运算

例6:

R ÷ S:

A
a1

除运算我的理解就是在R中,同时满足S中所有符合的信息,但是在S中没有字段的新表。

如上述例子,在R中满足S所有符合的信息为:{{b1,c2},{b2,c1},{b2,c3}},这些信息在R中但是S中没有的字段只有一个{a1},再加上a1的属性,所以结果为:

A
a1

在来个例子,以开头的Student表举例:

例7:找出专业为CS的同学的信息

设一个表K:

Sdept
CS

那么Student÷K:

再分析一边:在Student中满足K所有符合的信息为:

201215121李勇20CS
201215122刘晨19CS

这些信息在Student中但是K中没有的字段再加上对应的属性,所以结果为:

学号

Sno

姓名

Sname

性别

Ssex

年龄

Sage

201215121李勇20
201215122刘晨19

这里我们也可以看到,得到的结果是专业为CS的全部学生,往往题目中出现“全部”,“至少”等字眼时,并涉及到两个即以上的值我们都可以考虑用“除”运算。(这里应该很好理解,只有一个值如上述例7,我们可以直接一个选择加投影完事)

综合练习:以开头Student、Course、SC表为例:

例8:查询至少选修1号课程和3号课程的学生号码

看见“至少”可以考虑用除运算:

设先建立一个临时关系K:

Cno
1
3

只要学生号码,就在加上投影:πSno,Cno (SC)÷K={200215121};

例9:查询选修了2号课程的学生的学号

πSno(σCno='2'(SC))={200215121,200215122};

例10:查询至少选修了一门其直接先行课为5 号课程的学生姓名

这一题虽然有“至少”,但是只需要考虑一个,可以不用除运算

我们可以先找出来先修课为5的课程,把它和SC表以及Student在Sname的投影连接起来,最后求Sname。

或者

我们可以先找出来先修课为5的课程,把它和SC表连接起来,由于要求的是学生姓名,我们还需要把它和Student在Sname的投影连接起来,最后求Sname。

例10:查询选修了全部课程的学生学号和姓名。

有“全部”可以考虑除运算

我们可以先把Course表中所有的课程提出来,然后用SC表在Sno,Cno上的投影除去它,这样就能得到所有的选修了全部课程的学生学号,然后在和Student表在Sno,Sname上的投影连接,就得到了所有选修了全部课程的学生学号和姓名。

再来看一道大题,也是课本上的题目

例11:设有一个SPJ数据库,包括S、P、J及SPJ4个关系模式:

S表:
S(SNO,SNAME,STATUS,CITY)
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。

SNOSNAMESTATUSCITY
S1精益20天津
S2盛锡10北京
S3东方红30北京
S4丰泰盛20天津
S5为民30上海
P表:

P(PNO,PNAME,COLOR,WEIGHT)
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。

PNOPNAMECOLORWEIGHT
P1螺母12
P2螺栓绿17
P3螺丝刀14
P4螺丝刀14
P5凸轮40
P6齿轮30

J表:

J(JNO,JNAME,CITY)
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。

JNOJNAMECITY
J1三建北京
J2一汽长春
J3弹簧厂天津
J4造船厂天津
J5机车厂唐山
J6无线电厂常州
J7半导体厂南京

SPJ表:

SPJ(SNO,PNO,JNO,QTY)
供应商情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。

SNOPNOJNOQTY
S1P1J1200
S1P1J3100
S1P1J4700
S1P2J4700
S1P2J2100
S2P3J1400
S2P3J2200
S2P3J4500
S2P3J5400
S2P5J1400
S2P5J2100
S3P1J1200
S3P3J1200
S4P5J1100
S4P6J3300
S4P6J4200
S5P2J4100
S5P3J1200
S5P6J2200
S5P6J4500

1)求供应工程J1零件的供应商号码SNO:

2)求供应工程J1零件P1的供应商号码SNO:

3)求供应工程J1零件为红色的供应商号码SNO:

4)求没有使用天津供应商生产的红色零件的工程号JNO:

5)求至少用了供应商S1所供应的全部零件的工程号JNO:

手写的,字不太好看……

再来几道不是书上的,自己随便写的题目:

6)求与“螺母”颜色相同的产品名

7)求供应P1、P2,两种产品的厂家名

8)求使用了全部零件的工程名

以上题目答案都不唯一,我写得也不一定是最简单的,欢迎大家讨论

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值