(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 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)) GET W(S.SNO):?CX(﹁(?SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO))∨(?SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO)))
GET W(S.SNO):﹁?CX(﹁(﹁(?SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO))
∨
(
?SCY (SCY.SNO=S.SNO ∧
CX.CNO=SCY.CNO))))
GET W(S.SNO):﹁?CX(((?SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO))∧
﹁(?SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))))
(9) 检索选修所有课程的学生的学号。πSNO,CNO (SC)÷πCNO (C)
RANGE C CX SC SCX
27
数据库原理及应用 GET W(S.SNO):?CX?SCX (SCX.CNO=CX.CNO ∧ S.SNO=SCX.SNO)
全称改存在为:
RANGE C CX SC SCX
GET W(S.SNO):﹁?CX(﹁?SCX (SCX.CNO=CX.CNO ∧ S.SNO=SCX.SNO))
(10) 检索不选修任何课程的学生的学号。πSNO (S) -πSNO (SC)
RANGE SC SCX
GET W(S.SNO):?SCX(﹁(SCX.SNO=SNO)) 即:
RANGE SC SCX
GET W(S.SNO):?SCX(SCX.SNO≠SNO) 或
全称改存在为:
GET W(S.SNO):﹁?SCX(﹁(﹁(SCX.SNO=SNO)) )
即:
GET W(S.SNO):﹁?SCX(SCX.SNO=SNO)) 或
(你们的做法) RANGE SC SCX
C CX
GET W(S.SNO):?CX﹁(?SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))
28