SQL 查询练习:学生选课信息统计与分析
SQL 查询练习:学生选课信息统计与分析
本文通过七个 SQL 查询练习,展示如何使用内连接、外连接、派生表、嵌套查询等技术,统计分析学生选课信息,例如查询计算机系学生选修课程信息,查询没有选修课程的学生信息,查询没有人选修的课程信息,统计每名学生选修课程的门数和平均分,统计除特定课程外的其他课程的选课人数和平均分。
1. 查询计算机系学生选修课程的信息。结果显示学号,姓名,性别,选修课程名和成绩。(请使用显式内连接和派生表查询两种方式完成)
显式内连接方式
SELECT s.学号, s.姓名, s.性别, c.选修课程名, c.成绩
FROM 学生表 s
INNER JOIN 课程成绩表 c ON s.学号 = c.学号
WHERE s.所在系 = '计算机系';
派生表方式
SELECT s.学号, s.姓名, s.性别, c.选修课程名, c.成绩
FROM 学生表 s
INNER JOIN (SELECT 学号, 选修课程名, 成绩 FROM 课程成绩表) c ON s.学号 = c.学号
WHERE s.所在系 = '计算机系';
2. 查询没有选修课程的学生学号,姓名和所在系。(请使用外连接方式完成)
SELECT s.学号, s.姓名, s.所在系
FROM 学生表 s
LEFT JOIN 课程成绩表 c ON s.学号 = c.学号
WHERE c.学号 IS NULL;
3. 查询有哪些课程没有人选修,结果显示课程号,课程名和学分。(请使用外连接和嵌套查询两种方式完成)
外连接方式
SELECT c.课程号, c.课程名, c.学分
FROM 课程表 c
LEFT JOIN 课程成绩表 s ON c.课程号 = s.课程号
WHERE s.学号 IS NULL;
嵌套查询方式
SELECT c.课程号, c.课程名, c.学分
FROM 课程表 c
WHERE c.课程号 NOT IN (SELECT 课程号 FROM 课程成绩表);
4. 统计每名学生选修课程的门数和平均分,显示学生学号,姓名,所在系和选课门数及课程平均分。结果显示选课门数排名前3的学生信息。
SELECT s.学号, s.姓名, s.所在系, COUNT(c.课程号) AS 选课门数, AVG(c.成绩) AS 课程平均分
FROM 学生表 s
INNER JOIN 课程成绩表 c ON s.学号 = c.学号
GROUP BY s.学号, s.姓名, s.所在系
ORDER BY 选课门数 DESC
LIMIT 3;
5. 统计除2号课程外的其它课程的选课人数和平均分,显示课程号,课程名,学分,选课人数及平均分。最后结果中要包含2号课程的信息。
SELECT c.课程号, c.课程名, c.学分, COUNT(s.学号) AS 选课人数, AVG(s.成绩) AS 平均分
FROM 课程表 c
LEFT JOIN 课程成绩表 s ON c.课程号 = s.课程号
WHERE c.课程号 <> 2
GROUP BY c.课程号, c.课程名, c.学分
UNION
SELECT c.课程号, c.课程名, c.学分, COUNT(s.学号) AS 选课人数, AVG(s.成绩) AS 平均分
FROM 课程表 c
INNER JOIN 课程成绩表 s ON c.课程号 = s.课程号
WHERE c.课程号 = 2
GROUP BY c.课程号, c.课程名, c.学分;
注意:
- 以上代码中的表名
学生表、课程成绩表、课程表仅为示例,实际使用时请替换为您的数据库中实际的表名。 - 确保 SQL 语句中的字段名与您的数据库中实际字段名一致。
- 以上代码仅供参考,具体实现方式可能因数据库系统和数据结构的不同而有所差异。
原文地址: https://www.cveoy.top/t/topic/ph10 著作权归作者所有。请勿转载和采集!