前排提示:表的内容不一样,答案会不同,具体的创建脚本在最后
看完觉得有帮助的点个赞,谢谢捏ヾ(•ω•`)o
还有记得B站关注 嘉然今天吃什么
#红色字体是结果显示的字段
1.求选修了老师“王刚”开课课程且成绩在90分以上的学生姓名、课程名称和成绩;(姓名,课程名,成绩)
select 姓名,课程名,成绩
from 教师,课程,学习,学生
where 学生.学号 = 学习.学号
and 学习.课程号 = 课程.课程号
and 学习.教师号 = 教师.教师号
and 教师名 = "王刚"
and 成绩 > 90;
2.求选修了“王刚”老师所授全部课程的学生姓名和学院名称;(姓名,学院名称)
这里提供两种,其实差不多
#双重否定 不存在王刚老师的一门课这个学生没选
①
select 姓名,学院名称
from 学生,学院
where 学生.学院代码= 学院.学院代码
and not exists(select*
from 授课,教师
where 授课.教师号 = 教师.教师号
and 教师名 = "王刚" and not exists(select*
from 学习
where 学习.学号 = 学生.学号
and 学习.课程号 = 授课.课程号
and 学习.教师号 = 授课.教师号));
②
select 姓名,学院名称
from 学生,学院
where 学生.学院代码=学院.学院代码
and 学生.学号 in (select 学号
from 学生 x
where not exists (select*
from 教师,授课
here 教师.教师号 = 授课.教师号
and 教师. 教师名 = "王刚"
and not exists(select*
from 学习
where 学习.学号 = x.学号
and 学习.教师号 = 授课.教师号
and 学习.课程号 = 授课.课程号)));
3.求没有选修课程“软件工程”的学生学号和姓名;(学生学号,姓名)
select 学号,姓名
from 学生
where not exists(select*
from 学习,课程
where 学习.课程号 = 课程.课程号
and 学生.学号 = 学习.学号
and 课程.课程名 = "软件工程");