(10) 检索不选修任何课程的学生的学号。
π
SNO (S) -
π
SNO (SC)
写出ALPHA 命令:
(1) 检索学生的所有情况。S SSCC
GET W(S)
GET W(S,SC,C): S.SNO=SC.SNO ∧ SC.CNO =C.CNO
(2) 检索学生年龄大于等于20岁的学生姓名。πSN(σAGE>=20(S))
GET W(S.SN): (S.AGE>=20)
(3) 检索先修课号为C2的课程号。πCNO(σCPNO=?C2?(C))
GET W(C.CNO): (C.CPNO=’C2’)
(4) 检索选修了课程号C1成绩为A的所有学生姓名。 πSN(σCNO=?C1?∧SCORE=?A?(SCC))
RANGE SC SCX
GET W(S.SN): ?SCX (SCX.SNO=S.SNO ∧ SCX.CNO=’C1’ ∧ SCX.SCORE=’A’)
(5) 检索学号为S1的学生修读的所有课程名及先修课号。 πCN,CPNO (σSNO=?S1?(SCS))
RANGE SC SCX
GET W(C.CN,C.CPNO): ?SCX (SCX.CNO=C.CNO ∧ SCX.SNO=’S1’)
(6) 检索年龄为23岁的学生所修读的课程名。
πCN (σAGE=23(SSCC))
RANGE S SX SC SCX
GET W(C.CN): ?SX?SCX (SX.SNO=SCX.SNO ∧ SCX.CNO=C.CNO∧
25
数据库原理及应用 SX.AGE=23)
(7) 检索至少修读了学号为S5的学生修读的一门课的学生的姓名。
πSN (SSCπCNO (σSNO=?S5?(SC)))
RANGE SC SCX SC SCY
GET W(S.SN): ?SCX?SCY (SCX.SNO=’S5’ ∧ SCY.SNO=S.SNO∧ SCY.CNO=SCX.CNO)
或
RANGE C CX SC SCX SC SCY GET
W(S.SNO):
?CX(
?SCX (SCX.SNO=’S5’ ∧
CX.CNO=SCX.CNO)->?SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))
(8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名。 πSN (S(πSNO,CNO (SC)÷πCNO (σSNO=?S4?(SC))))
RANGE C CX SC SCX SC SCY GET
W(S.SNO):
?CX(
?SCX (SCX.SNO=’S4’ ∧
CX.CNO=SCX.CNO)->?SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))
也可以变换( A -> B ≡ ﹁ A ∨ B ?X(A) ≡ ﹁ ?X(﹁ A ))
26
真值表 A B A -> B ≡ ﹁ A ∨ B
T T T T T F F F F T T T F F T T
RANGE C CX