(二)嵌套查询
1.查询与“王强”专业相同的学生的基本信息
2.查询所选课程的平均成绩小于“张丽”的平均成绩的学生学号、姓名及平均成绩
3.查询只选修了一门课程的学生的学号、姓名、所在院系及成绩: 4. 查询选修了“数据库”和“数据结构”课程的学生,结果中显示学生的学号、 姓名、专业
5.查询只选修了“数据库”和“数据结构”两门课程的学生,结果中显示学生的学号、姓名、专业
6. 查询选修的课程中至少有一门和“张丽”选修课程一样的学生,结果中显示学生的学号、姓名及选修的课程号:
7.查询选修了“赵敏”选修的全部课程的学生,结果中显示学生的学号、姓名
和专业:
8.查询和“张丽”选修的课程完全一样的学生,结果中显示学生的学号、姓名和专业
9. 查询选修了“数据结构”课程的学生的学号和姓名
10.查询其它专业中比“计算机”专业所有学生年龄都小的学生,结果中显示学生的学号、姓名、年龄和专业
以数据库student,数据表stu、course、sc及表数据为基础,请使用sQL语句实现以下查询操作,并验证查询结果。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢
以下是基于你提供的需求,使用MySQL实现的查询语句:
- 查询与“王强”专业相同的学生的基本信息
-- 假设stu表中有字段name(姓名)和major(专业) SELECT * FROM stu WHERE major = (SELECT major FROM stu WHERE name = '王强');- 查询所选课程的平均成绩小于“张丽”的平均成绩的学生学号、姓名及平均成绩
-- 假设sc表中有字段sno(学号)和score(成绩),stu表中有字段sno和name SELECT stu.sno, stu.name, AVG(sc.score) AS avg_score FROM stu JOIN sc ON stu.sno = sc.sno GROUP BY stu.sno, stu.name HAVING AVG(sc.score) < ( SELECT AVG(score) FROM sc WHERE sno = (SELECT sno FROM stu WHERE name = '张丽') );- 查询只选修了一门课程的学生的学号、姓名、所在院系及成绩
-- 假设stu表中有字段sno(学号)、name(姓名)、department(院系),sc表中有字段sno和score SELECT stu.sno, stu.name, stu.department, sc.score FROM stu JOIN sc ON stu.sno = sc.sno WHERE stu.sno IN ( SELECT sno FROM ( SELECT sno, COUNT(*) AS course_count FROM sc GROUP BY sno HAVING course_count = 1 ) AS single_course_students );- 查询选修了“数据库”和“数据结构”课程的学生,结果中显示学生的学号、姓名、专业
-- 假设stu表中有字段sno(学号)、name(姓名)、major(专业),course表中有字段cno(课程号)和cname(课程名),sc表用于关联学生和课程 SELECT stu.sno, stu.name, stu.major FROM stu JOIN sc ON stu.sno = sc.sno JOIN course ON sc.cno = course.cno WHERE course.cname IN ('数据库', '数据结构') GROUP BY stu.sno, stu.name, stu.major HAVING COUNT(DISTINCT course.cname) = 2;- 查询只选修了“数据库”和“数据结构”两门课程的学生,结果中显示学生的学号、姓名、专业
-- 假设stu表中有字段sno(学号)、name(姓名)、major(专业),course表中有字段cno(课程号)和cname(课程名),sc表用于关联学生和课程 SELECT stu.sno, stu.name, stu.major FROM stu JOIN sc ON stu.sno = sc.sno JOIN course ON sc.cno = course.cno GROUP BY stu.sno, stu.name, stu.major HAVING COUNT(DISTINCT course.cname) = 2 AND SUM(course.cname NOT IN ('数据库', '数据结构')) = 0;- 查询选修的课程中至少有一门和“张丽”选修课程一样的学生,结果中显示学生的学号、姓名及选修的课程号
-- 假设stu表中有字段sno(学号)、name(姓名),sc表中有字段sno和cno(课程号) SELECT stu.sno, stu.name, sc.cno FROM stu JOIN sc ON stu.sno = sc.sno WHERE sc.cno IN ( SELECT cno FROM sc WHERE sno = (SELECT sno FROM stu WHERE name = '张丽') );- 查询选修了“赵敏”选修的全部课程的学生,结果中显示学生的学号、姓名和专业
-- 假设stu表中有字段sno(学号)、name(姓名)、major(专业),sc表中有字段sno和cno(课程号) SELECT stu.sno, stu.name, stu.major FROM stu WHERE NOT EXISTS ( SELECT cno FROM sc WHERE sno = (SELECT sno FROM stu WHERE name = '赵敏') AND NOT EXISTS ( SELECT * FROM sc AS sub_sc WHERE sub_sc.sno = stu.sno AND sub_sc.cno = sc.cno ) );- 查询和“张丽”选修的课程完全一样的学生,结果中显示学生的学号、姓名和专业
-- 假设stu表中有字段sno(学号)、name(姓名)、major(专业),sc表中有字段sno和cno(课程号) SELECT stu.sno, stu.name, stu.major FROM stu WHERE sno <> (SELECT sno FROM stu WHERE name = '张丽') AND NOT EXISTS ( (SELECT cno FROM sc WHERE sno = (SELECT sno FROM stu WHERE name = '张丽')) EXCEPT (SELECT cno FROM sc WHERE sno = stu.sno) ) AND NOT EXISTS ( (SELECT cno FROM sc WHERE sno = stu.sno) EXCEPT (SELECT cno FROM sc WHERE sno = (SELECT sno FROM stu WHERE name = '张丽')) );- 查询选修了“数据结构”课程的学生的学号和姓名
-- 假设stu表中有字段sno(学号)、name(姓名),course表中有字段cno(课程号)和cname(课程名),sc表用于关联学生和课程 SELECT stu.sno, stu.name FROM stu JOIN sc ON stu.sno = sc.sno JOIN course ON sc.cno = course.cno WHERE course.cname = '数据结构';- 查询其它专业中比“计算机”专业所有学生年龄都小的学生,结果中显示学生的学号、姓名、年龄和专业
-- 假设stu表中有字段sno(学号)、name(姓名)、age(年龄)、major(专业) SELECT sno, name, age, major FROM stu WHERE major <> '计算机' AND age < ALL (SELECT age FROM stu WHERE major = '计算机');要验证查询结果,可以在MySQL数据库管理工具(如MySQL Workbench)中执行这些查询语句,查看返回的结果是否符合预期。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报