Department(dNo,dName,officeRoom,homePage)
Student(sNo,sName,sex,age,dNo)
Course(cNo,cName,cPNo,credit,dNo)
SC(sNo,cNo,score,recordda)
查询仅选修了算法一门课程的学生姓名
(思路:可以利用选了算法的学生的集合减去不止选了算法一门课的学生和没算算法的学生组成的集合)
关系代数表达式如下所示:
ΠsName(ΠsName,sNo(Student)⋈ΠsNo,cNo(SC)⋈(σcName=‘算法′ΠcName,cNo(Course)))−ΠsName(ΠsName,sNo(Student)⋈ΠsNo,cNo(SC)⋈(σcName<>‘算法′ΠcName,cNo(Course)))
Π
s
N
a
m
e
(
Π
s
N
a
m
e
,
s
N
o
(
S
t
u
d
e
n
t
)
⋈
Π
s
N
o
,
c
N
o
(
S
C
)
⋈
(
σ
c
N
a
m
e
=
‘
算
法
′
Π
c
N
a
m
e
,
c
N
o
(
C
o
u
r
s
e
)
)
)
−
Π
s
N
a
m
e
(
Π
s
N
a
m
e
,
s
N
o
(
S
t
u
d
e
n
t
)
⋈
Π
s
N
o
,
c
N
o
(
S
C
)
⋈
(
σ
c
N
a
m
e
<>
‘
算
法
′
Π
c
N
a
m
e
,
c
N
o
(
C
o
u
r
s
e
)
)
)
也可以写成(与上式的区别在于利用一个更大的集合去减,而且正好减到了没选算法的学生,上式则是利用一个更小的集合区间,减掉的部分里面不包含没有选算法的学生,因为已经自动过滤掉了)
ΠsName(Student)−ΠsName(ΠsName,sNo(Student)⋈ΠsNo,cNo(SC)⋈(σcName<>‘算法′ΠcName,cNo(Course)))
Π
s
N
a
m
e
(
S
t
u
d
e
n
t
)
−
Π
s
N
a
m
e
(
Π
s
N
a
m
e
,
s
N
o
(
S
t
u
d
e
n
t
)
⋈
Π
s
N
o
,
c
N
o
(
S
C
)
⋈
(
σ
c
N
a
m
e
<>
‘
算
法
′
Π
c
N
a
m
e
,
c
N
o
(
C
o
u
r
s
e
)
)
)