(10)查询选修了4门及以上课程的学生的学号、姓名和选修课程数。 (11) 查询选修全部课程的学生姓名,相当于查询这样的学生,没有一门课程是他不选的。 (12) 查询平均成绩大于等于黄河同学的平均成绩的学生的学号、姓名和平均成绩。 (13)查询每门课程获得最高分的同学的学号、姓名、课程名称和成绩,并按照最高成绩从高到低进行排序。数据库代码
时间: 2023-11-16 09:24:52 浏览: 263
下面是针对您提出的问题的数据库查询代码:
(10) 查询选修了4门及以上课程的学生的学号、姓名和选修课程数。
```sql
SELECT s.student_id, s.student_name, COUNT(*) AS course_num
FROM student s INNER JOIN course_selection cs ON s.student_id = cs.student_id
GROUP BY s.student_id, s.student_name
HAVING COUNT(*) >= 4;
```
(11) 查询选修全部课程的学生姓名,相当于查询这样的学生,没有一门课程是他不选的。
```sql
SELECT s.student_name
FROM student s LEFT JOIN course c ON NOT EXISTS (
SELECT *
FROM course
WHERE course_id NOT IN (
SELECT course_id
FROM course_selection
WHERE student_id = s.student_id
)
)
```
(12) 查询平均成绩大于等于黄河同学的平均成绩的学生的学号、姓名和平均成绩。
```sql
SELECT s.student_id, s.student_name, AVG(cs.score) AS avg_score
FROM student s INNER JOIN course_selection cs ON s.student_id = cs.student_id
WHERE AVG(cs.score) >= (
SELECT AVG(score)
FROM course_selection
WHERE student_id = '黄河'
)
GROUP BY s.student_id, s.student_name;
```
(13) 查询每门课程获得最高分的同学的学号、姓名、课程名称和成绩,并按照最高成绩从高到低进行排序。
```sql
SELECT s.student_id, s.student_name, c.course_name, MAX(cs.score) AS max_score
FROM student s INNER JOIN course_selection cs ON s.student_id = cs.student_id
INNER JOIN course c ON cs.course_id = c.course_id
WHERE cs.score = (
SELECT MAX(score)
FROM course_selection
WHERE course_id = cs.course_id
)
GROUP BY s.student_id, s.student_name, c.course_name, cs.score
ORDER BY cs.score DESC;
```
阅读全文