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

(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

联系客服:779662525#qq.com(#替换为@)