查询全部学生都选修了的课程的课程号、课程名。用关系代数表达式
时间: 2023-06-01 12:02:24 浏览: 123
SELECT Course.cno, Course.cname
FROM Course
WHERE NOT EXISTS (
SELECT *
FROM Student
WHERE NOT EXISTS (
SELECT *
FROM SC
WHERE SC.sno = Student.sno AND SC.cno = Course.cno
)
)
相关问题
用关系代数表达式,查询学生学号'201901'号学生选修的课程的课程号和课程名
假设有三个关系模式:学生(S)、课程(C)、选课(R)。其中,学生(S)包含属性s_id(学号)、s_name(姓名)、s_age(年龄)等;课程(C)包含属性c_id(课程号)、c_name(课程名)、c_teacher(授课教师)等;选课(R)包含属性s_id(学号)、c_id(课程号)、score(成绩)等。
则查询学生学号'201901'号学生选修的课程的课程号和课程名的关系代数表达式为:
π c_id, c_name (C ⋈ (π c_id, s_id (R ⋈ σ s_id='201901' (π s_id, c_id (R)))))
解释如下:
首先按照学号选出学号为'201901'的选课记录,即σ s_id='201901' (π s_id, c_id (R));然后从这些记录中选出课程号和学号,即π c_id, s_id (R ⋈ σ s_id='201901' (π s_id, c_id (R)));接着将这些记录与课程表C做自然连接,即C ⋈ (π c_id, s_id (R ⋈ σ s_id='201901' (π s_id, c_id (R))));最后选出课程号和课程名,即π c_id, c_name (C ⋈ (π c_id, s_id (R ⋈ σ s_id='201901' (π s_id, c_id (R)))))。
查询至少选修了学生201215122选修的全部课程的学生号码关系代数
假设学生选修课程的关系模式为:
Student(sid, sname) -- 学生表,包含学生编号和学生姓名
Course(cid, cname) -- 课程表,包含课程编号和课程名称
Enrollment(sid, cid) -- 选课表,记录学生选修的课程,包含学生编号和课程编号
则查询至少选修了学生201215122选修的全部课程的学生号码的关系代数表达式如下:
π sid ((π cid (Enrollment) - π cid (σ sid=201215122(Enrollment))) - π cid (σ sid NOT IN (201215122) (Enrollment)))GROUP BY sidHAVING COUNT(cid) = (SELECT COUNT(cid) FROM Course))
该表达式的含义是:首先从选课表中剔除学生201215122选修的课程,再从中剔除未选修该课程的学生,最后根据学生编号进行分组,并统计每个学生选修的课程数量是否与总课程数量相等,如果相等则表示该学生选修了全部课程。