数据库——关系演算ALPHA例题

设有学生-课程关系数据库,它由三个关系组成,它们的模式是:
学生S(学号SNO,姓名SN,所在系DEPT,年龄AGE);
课程C(课程号CNO,课程名CN,先修课号CPNO);
选课SC(学号SNO,课程号CNO,成绩SCORE)。
请用关系演算ALPHA语言分别写出下列查询:
(1) 检索学生的所有情况。

方法一:GET W(S)
方法二:GET W(S,SC,C):S.SNO=SC.SNO∧C.CNO=SC.CNO

(2) 检索学生年龄大于等于20岁的学生姓名。

GET W(S.SN):S.AGE≥20

(3) 检索先修课号为C2的课程号。

GET W(C.CNO):C.CPNO='C2'

(4) 检索选修了课程号C1成绩为A的所有学生姓名。

RANGE SC SCX
GET W(S.SN):∃SCX(SCX.SNO=S.SNO∧SCX.CNO='C1'∧SCX.SCORE='A')

(5) 检索学号为S1的学生修读的所有课程名及先修课号。

RANGE SC SCX
GET W(C.CN,C.CPNO):∃SCX(C.CNO=SCX.CNO∧SCX.SNO='S1')

(6) 检索年龄为23岁的学生所修读的课程名。

RANGE S SX
	  SC SCX
GET W(C.CN):∃SCX∃SX(C.CNO=SCX.CNO∧SX.SNO=SCX.SNO∧SX.AGE=23)

(7) 检索至少修读了学号为S5的学生修读的一门课的学生的姓名。

方法一:
RANGE C CX
	  SC SCX
	  SC SCY
GET W(S.SN):∃CX(∃SCX(SCX.CNO=CX.CNO∧SCX.SNO='S5')→∃SCY(SCY.CNO=CX.CNO∧SCY.SNO=S.SNO))

方法二:
RANGE SC SCX
	  SC SCY
GET W(S.SN):∃SCX∃SCY(SCX.SNO='S5'∧S.SNO=SCY.SNO∧SCY.CNO=SCX.CNO)

(8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名。

方法一:
RANGE C CX
	  SC SCX
	  SC SCY
GET W(S.SN):∀CX(∃SCX(SCX.CNO=CX.CNO∧SCX.SNO='S4')→∃SCY(SCY.CNO=CX.CNO∧SCY.SNO=S.SNO))

方法二:
RANGE C CX
	  SC SCX
	  SC SCY
GET W(S.SN):¬∃CX((∃SCX(SCX.SNO='S4'∧CX.CNO=SCX.CNO))∧¬(∃SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO)))

(9) 检索选修所有课程的学生的学号。

方法一:
RANGE C CX
	  SC SCX
GET W(S.SNO):∀CX∃SCX(SCX.CNO=CX.CNO∧SCX.SNO=S.SNO)

方法二:
RANGE C CX
	  SC SCX
GET W(S.SNO):¬∃CX(:¬∃SCX(SCX.CNO=CX.CNO∧SCX.SNO=S.SNO))

(10) 检索不选修任何课程的学生的学号。

方法一:
RANGE C CX
	  SC SCX
GET W(S.SNO):∀CX(¬∃SCX(SCX.CNO=CX.CNO∧SCX.SNO=S.SNO))

方法二:
RANGE SC SCX
GET W(S.SNO):∀SCX(¬(SCX.SNO=SNO))

方法三:
RANGE SC SCX
GET W(S.SNO):∀SCX(SCX.SNO≠SNO)

方法四:
RANGE SC SCX
GET W(S.SNO):¬∃SCX(SCX.SNO=SNO)

方法五:
RANGE SC SCX
GET W(S.SNO):∀CX∃SCX(SCX.SNO≠SNO∨SCX.CNO≠CX.CNO)

(11) 在关系C中增添一门新课(新课信息自定)

扫描二维码关注公众号,回复: 10908627 查看本文章
MOVE 'C9' TO C.CNO
MOVE '计算机系统结构' TO C.CN
MOVE 'C4' TO C.CPNO
PUT W(C)

(12) 学号为S17的学生因故退学请在S与SC中将其除名。

#由于外键的约束条件此处应该先对SC关系进行删除
HOLD W(SC):SNO='S17'
DELETE W
HOLD W(S):SNO='S17'
DELETE W

(13) 将关系S中学生S6的年龄改为22岁(只需ALPHA操作)。

HOLD W(S.SNO,S.AGE):S.SNO='S6'
MOVE 22 TO W.AGE
UPDATE W

(14) 将关系S中学生的年龄均增加1岁(只需ALPHA操作)。

#此处应该连同SNO主键一起放至W工作空间
HOLD W(S.SNO,S.AGE)
MOVE W.AGE+1 TO W.AGE
UPDATE W
发布了20 篇原创文章 · 获赞 16 · 访问量 1277

猜你喜欢

转载自blog.csdn.net/SAMSARS/article/details/105497626