- 求选修了老师 “王刚” 开课课程且成绩在 90 分以上的学生姓名、课程名称和成绩;(姓名,课程名,成绩)
| SELECT 学生.姓名, 课程.课程名, 学习.成绩 |
| FROM 学生 |
| JOIN 学习 ON 学生.学号 = 学习.学号 |
| JOIN 授课 ON 学习.课程号 = 授课.课程号 AND 学习.教师号 = 授课.教师号 |
| JOIN 教师 ON 授课.教师号 = 教师.教师号 |
| JOIN 课程 ON 授课.课程号 = 课程.课程号 |
| WHERE 教师.教师名 = '王刚' |
| AND 学习.成绩 > 90; |
- 求选修了 “王刚” 老师所授全部课程的学生姓名和学院名称;(姓名,学院名称)
| SELECT 学生.姓名, 学院.学院名称 |
| FROM 学生 |
| JOIN 学院 ON 学生.学院代码 = 学院.学院代码 |
| WHERE NOT EXISTS (SELECT * |
| FROM 授课 |
| JOIN 教师 ON 授课.教师号 = 教师.教师号 |
| WHERE 教师.教师名 = '王刚' |
| AND NOT EXISTS (SELECT * |
| FROM 学习 |
| WHERE 学习.学号 = 学生.学号 |
| AND 学习.课程号 = 授课.课程号)); |
- 求没有选修课程 “软件工程” 的学生学号和姓名;(学生学号,姓名)
| SELECT 学生.学号, 学生.姓名 |
| FROM 学生 |
| WHERE NOT EXISTS (SELECT * |
| FROM 学习 |
| JOIN 课程 ON 学习.课程号 = 课程.课程号 |
| WHERE 学生.学号 = 学习.学号 |
| AND 课程.课程名 = '软件工程'); |
| SELECT 学号 |
| FROM 学习 |
| GROUP BY 学号 |
| HAVING COUNT(课程号) >= 2; |
- 求课程 “经济学” 不及格学生姓名和考试成绩;(姓名,成绩)
| SELECT 学生.姓名, 学习.成绩 |
| FROM 学生 |
| JOIN 学习 ON 学生.学号 = 学习.学号 |
| JOIN 课程 ON 学习.课程号 = 课程.课程号 |
| WHERE 课程.课程名 = '经济学' |
| AND 学习.成绩 < 60; |
- 求至少选修了与学号 “T06” 同学选修的课程相同的学生学号;(学号)
| SELECT DISTINCT 学习.学号 |
| FROM 学习 |
| WHERE 学号 != 'T06' |
| AND NOT EXISTS (SELECT * |
| FROM 学习 AS T06课程 |
| WHERE T06课程.学号 = 'T06' |
| AND NOT EXISTS (SELECT * |
| FROM 学习 学生课程 |
| WHERE 学生课程.学号 = 学习.学号 |
| AND 学生课程.课程号 = T06课程.课程号)); |
- 求至少选修了 “C3,C4” 两门课程的学生姓名和学院名称;(姓名,学院名称)
| SELECT DISTINCT 学生.姓名, 学院.学院名称 |
| FROM 学生 |
| JOIN 学院 ON 学生.学院代码 = 学院.学院代码 |
| WHERE EXISTS (SELECT * |
| FROM 学习 AS 学习C3 |
| WHERE 学习C3.学号 = 学生.学号 |
| AND 学习C3.课程号 = 'C3') |
| AND EXISTS (SELECT * |
| FROM 学习 AS 学习C4 |
| WHERE 学习C4.学号 = 学生.学号 |
| AND 学习C4.课程号 = 'C4'); |
- 查询 “王石” 同学没有选修的课程号和课程名; (课程号,课程名)
| SELECT 课程.课程号, 课程.课程名 |
| FROM 课程 |
| WHERE NOT EXISTS (SELECT * |
| FROM 学习 |
| JOIN 学生 on 学习.学号 = 学生.学号 |
| WHERE 学生.姓名 = '王石' |
| AND 学习.课程号 = 课程.课程号); |
| SELECT 课程.课程号 |
| FROM 课程 |
| WHERE NOT EXISTS (SELECT * |
| FROM 学习 |
| WHERE 学习.课程号 = 课程.课程号); |
| SELECT 学生.姓名 |
| FROM 学生 |
| WHERE NOT EXISTS (SELECT * |
| FROM 课程 |
| WHERE NOT EXISTS (SELECT * |
| FROM 学习 |
| WHERE 学习.学号 = 学生.学号 |
| AND 学习.课程号 = 课程.课程号)); |
- 查询各学院课程 “经济学” 的平均分,并按照成绩从高到低的顺序排列;(学院名称,平均分)
| SELECT 学院.学院名称, AVG(学习.成绩) AS 平均分 |
| FROM 学生 |
| JOIN 学院 ON 学生.学院代码 = 学院.学院代码 |
| JOIN 学习 ON 学生.学号 = 学习.学号 |
| JOIN 课程 ON 学习.课程号 = 课程.课程号 |
| WHERE 课程.课程名 = '经济学' |
| GROUP BY 学院.学院名称 |
| ORDER BY 平均分 DESC; |
- 查询选修课程 “经济学” 的学生姓名和所在院系,结果按各院系排列,同时成绩从高到低排列;(姓名,学院名称,成绩)
| SELECT 学生.姓名, 学院.学院名称, 学习.成绩 |
| FROM 学生 |
| JOIN 学院 ON 学生.学院代码 = 学院.学院代码 |
| JOIN 学习 ON 学生.学号 = 学习.学号 |
| JOIN 课程 ON 学习.课程号 = 课程.课程号 |
| WHERE 课程.课程名 = '经济学' |
| ORDER BY 学院.学院名称, 学习.成绩 DESC; |
- 求学时在 30-45 之间(含 30 和 45)的课程的课程号和课程名称及授课教师;(课程号,课程名,教师姓名)
| SELECT 课程.课程号, 课程.课程名, 教师.教师名 |
| FROM 课程 |
| JOIN 授课 ON 课程.课程号 = 授课.课程号 |
| JOIN 教师 ON 授课.教师号 = 教师.教师号 |
| WHERE 课程.学时 BETWEEN 30 AND 45; |
- 检索选修课程 “经济学” 的最高分学生的姓名;(姓名)
| SELECT 学生.姓名 |
| FROM 学生 |
| JOIN 学习 ON 学生.学号 = 学习.学号 |
| JOIN 课程 ON 学习.课程号 = 课程.课程号 |
| WHERE 课程.课程名 = '经济学' |
| ORDER BY 学习.成绩 DESC |
| LIMIT 1; |
- 查询选课人数超过 5 人的课程的课程号及课程名;(课程号,课程名)
| SELECT 课程.课程号, 课程.课程名 |
| FROM 课程 |
| NATURAL JOIN 学习 |
| GROUP BY 课程.课程号, 课程.课程名 |
| HAVING COUNT(学习.学号) > 5; |