|
发表于 2024-10-31 16:42:50
|
显示全部楼层
为了帮助您编写这些SQL查询语句,我将逐一解释每个问题的查询逻辑。
6. **查询王小虎同学所选课程的课程号、课程名和成绩。**
- SELECT c.课程号, c.课程名, sc.成绩
- FROM 学生 s
- JOIN 选课 sc ON s.学号 = sc.学号
- JOIN 课程 c ON sc.课程号 = c.课程号
- WHERE s.姓名 = '王小虎';
复制代码
7. **查询王小虎同学所选课程的平均成绩。**
- SELECT AVG(sc.成绩) AS 平均成绩
- FROM 学生 s
- JOIN 选课 sc ON s.学号 = sc.学号
- WHERE s.姓名 = '王小虎';
复制代码
8. **查询至少选修了两门课程的学生的学号。**
- SELECT sc.学号
- FROM 选课 sc
- GROUP BY sc.学号
- HAVING COUNT(sc.课程号) >= 2;
复制代码
9. **查询每个学生所选课程的平均成绩,只列出平均成绩在80分以上的学号和平均成绩,结果按平均成绩降序排列,平均成绩相同的按学号升序排列。**
- SELECT sc.学号, AVG(sc.成绩) AS 平均成绩
- FROM 选课 sc
- GROUP BY sc.学号
- HAVING AVG(sc.成绩) > 80
- ORDER BY 平均成绩 DESC, sc.学号 ASC;
复制代码
10. **查询各院系男女生人数,列出院系、性别和人数。**
- SELECT s.院系, s.性别, COUNT(*) AS 人数
- FROM 学生 s
- GROUP BY s.院系, s.性别;
复制代码
11. **查询至少选修了3门课,且平均成绩在80以上、没有不及格课程的学生,列出学号、姓名。**
- SELECT s.学号, s.姓名
- FROM 学生 s
- JOIN 选课 sc ON s.学号 = sc.学号
- GROUP BY s.学号, s.姓名
- HAVING COUNT(sc.课程号) >= 3
- AND AVG(sc.成绩) > 80
- AND MIN(sc.成绩) >= 60;
复制代码
12. **查询选过课、但没有选修选课人数在5以上的课程的学生,列出学号、姓名、所选修课程的门数。**
- SELECT s.学号, s.姓名, COUNT(sc.课程号) AS 选修课程数
- FROM 学生 s
- JOIN 选课 sc ON s.学号 = sc.学号
- WHERE sc.课程号 NOT IN (
- SELECT sc.课程号
- FROM 选课 sc
- GROUP BY sc.课程号
- HAVING COUNT(sc.学号) > 5
- )
- GROUP BY s.学号, s.姓名;
复制代码
这些查询假设数据库中有三个表:`学生`、`选课`和`课程`,并且表结构符合常见的设计。请根据实际的数据库结构进行调整。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|