发布时间 : 星期三 文章《数据库原理及应用》第2章 部分习题解答更新完毕开始阅读f7de9f2a4a7302768e993955
★ 关系演算补充内容
* 把谓词演算应用于到关系运算中就是关系演算,它分为元组关系演算与域关系演算。
* 谓词演算
1)个体是可以独立存在的物体 2)谓词是用于刻划个体性质或关系
3)一个谓词可以与一个个体相联,此种谓词称为一元谓词,
一元谓词刻划一个个体的性质。
4)a,b,...表示个体,一个一元谓词可表示为F(a)
一个谓词中个体是可以变化的,如“...是大学生”,可以是“王强是大学生”,也可以变为“李华是大学生”,令F(x)表示x是大学生,又令“王强”为a,“李华”为b,则“王强是大学生,李华也是大学生”可写为F(a)∧F(b)
* 现谓词演算用于关系,元组为个体,关系为个体域,则 R(u)即表示u是关系R中的元组
* 元组关系演算表达式{t|φ(t)},表示所有使φ为真的元组集合,即描述了一个关系。
P69
10、设有学生-课程关系数据库,它由三个关系组成,它们的模式是:学生S(学号S#,姓名SN,所在系SD,年龄SA)、课程C(课程号C#,课程名CN,先修课号PC#)、SC(学号S#,课程号C#,成绩G)。
请用关系代数与ALPHA语言分别写出下列查询: (1) 检索学生的所有情况。 S SSCC
(2) 检索学生年龄大于等于20岁的学生姓名。 πSN(σSA>=20(S))
(3) 检索先修课号为C2的课程号。 πC#(σPC#=’C2’(C))
(4) 检索课程号C1的成绩为A的所有学生姓名。 πSN(σC#=’C1’∧G=’A’(SCC))
(5) 检索S1修读的所有课程名及先修课号。 πCN,PC# (σS#=’S1’(SCS))
(6) 检索年龄为23岁的学生所修读的课程名。 πCN (σSA=23(SSCC))
(7) 检索至少修读了S5修读的一门课的学生的姓名。 πSN (SSCπC# (σS#=’S5’(SC)))
(8) 检索修读了S4所修读的所有课程的学生的姓名。 πSN (S(πS#,C# (SC)÷πC# (σS#=’S4’(SC)))) (9) 检索选修所有课程的学生的学号。 πS#,C# (SC)÷πC# (C)
(10) 检索不选修任何课程的学生的学号。 πS# (S) -πS# (SC)
设有学生-课程关系数据库,它由三个关系组成,它们的模式是:学生S(学号S#,姓名SN,所在系SD,年龄SA)、课程C(课程号C#,课程名CN,先修课号PC#)、SC(学号S#,课程号C#,成绩G)。
请用关系代数与ALPHA语言分别写出下列查询:
(1) 检索学生的所有情况。S SSCC
GET W(S)
GET W(S,SC,C): S.S#=SC.S# ∧ SC.C# =C.C#
(2) 检索学生年龄大于等于20岁的学生姓名。πSN(σSA>=20(S))
GET W(S.SN): (S.SA>=20)
(3) 检索先修课号为C2的课程号。πC#(σPC#=’C2’(C))
GET W(C.C#): (C.PC#=’C2’)
(4) 检索课程号C1的成绩为A的所有学生姓名。πSN(σC#=’C1’∧G=’A’(SCC))
RANGE SC SCX
GET W(S.SN): ?SCX (SCX.S#=S.S# ∧ SCX.C#=’C1’ ∧ SCX.G=’A’)
(5) 检索S1修读的所有课程名及先修课号。πCN,PC# (σS#=’S1’(SCS))
RANGE SC SCX
GET W(C.CN,C.PC#): ?SCX (SCX.C#=C.C# ∧ SCX.S#=’S1’)
(6) 检索年龄为23岁的学生所修读的课程名。πCN (σSA=23(SSCC))
RANGE S SX SC SCX
GET W(C.CN): ?SX?SCX (SX.S#=SCX.S# ∧ SCX.C#=C.C#∧ SX.SA=23)
(7) 检索至少修读为S5修读的一门课的学生的姓名。 πSN (SSCπC# (σS#=’S5’(SC)))
RANGE SC SCX SC SCY
GET W(S.SN): ?SCX?SCY (SCX.S#=’S5’ ∧ SCY.S#=S.S#∧ SCY.C#=SCX.C#)
或
RANGE C CX SC SCX SC SCY
GET W(S.S#):?CX(?SCX (SCX.S#=’S5’ ∧ CX.C#=SCX.C#)->?SCY (SCY.S#=S.S# ∧ CX.C#=SCY.C#))
(8) 检索修读S4所修读的所有课程的学生的姓名。 πSN (S(πS#,C# (SC)÷πC# (σS#=’S4’(SC))))
RANGE C CX SC SCX SC SCY
GET W(S.S#):?CX(?SCX (SCX.S#=’S4’ ∧ CX.C#=SCX.C#)->?SCY (SCY.S#=S.S# ∧ CX.C#=SCY.C#))