数据库原理及应用(第3版) - 全部习题new 下载本文

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