SELECT C.CN FROM S,SC,C
WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND S.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))
SELECT S.SNO FROM S,SC X,SC Y
WHERE S.SNO=Y.SNO AND X.CNO=Y.CNO AND X.SNO=’S5’
(8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名。
33
数据库原理及应用
π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))
也可以变换
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))))
34
SELECT S.SNO FROM S
WHERE NOT EXISTS (SELECT * FROM SC X
WHERE X.SNO=’S4’ AND NOT EXISTS (SELECT * FROM SC Y
WHERE S.SNO=Y.SNO AND Y.CNO=X.CNO))
(9) 检索选修所有课程的学生的学号。 πSNO,CNO (SC)÷πCNO (C)
RANGE C CX SC SCX
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))
SELECT S.SNO FROM S
35
数据库原理及应用 WHERE NOT EXISTS (SELECT * FROM C CX WHERE NOT EXISTS (SELECT * FROM SC SCX
WHERE S.SNO=SCX.SNO AND SCX.CNO=CX.CNO))
(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)) 或
36