SQL查询实例:学生选课系统数据库实战

本文以学生选课系统数据库为例,演示如何使用SQL语句进行各种查询操作。假设数据库包含以下三个关系表:

  • 学生(学号,姓名,性别,年龄)- 课程(课程号,课程名,教师名)- 选课(学号,课程号,成绩)

我们将针对以下12个查询需求,提供相应的SQL语句和分析:

**1. 查询'程军'老师所授课程的课程号和课程名:**sqlSELECT 课程号, 课程名FROM 课程WHERE 教师名 = '程军';

分析: 直接在课程表中查找教师名为'程军'的记录,并返回对应的课程号课程名

**2. 查询年龄大于21的男学生的学号和姓名:**sqlSELECT 学号, 姓名FROM 学生WHERE 年龄 > 21 AND 性别 = '男';

分析:学生表中查找满足年龄大于21且性别为'男'的记录,并返回对应的学号姓名

**3. 查询选修课程包含'程军'老师所授课程之一的学生的学号和姓名:**sqlSELECT DISTINCT S.学号, S.姓名FROM 学生 SINNER JOIN 选课 X ON S.学号 = X.学号INNER JOIN 课程 C ON X.课程号 = C.课程号WHERE C.教师名 = '程军';

分析: 使用联表查询,将学生选课课程表连接起来,筛选出教师名为'程军'的课程,并返回选修了这些课程的学生的学号姓名。使用DISTINCT关键字去重。

**4. 查询选修课程名为'C语言'的学生学号和姓名:**sqlSELECT S.学号, S.姓名FROM 学生 SINNER JOIN 选课 X ON S.学号 = X.学号INNER JOIN 课程 C ON X.课程号 = C.课程号WHERE C.课程名 = 'C语言';

分析: 与查询3类似,通过联表查询,筛选出课程名为'C语言'的课程,并返回选修了该课程的学生的学号姓名

**5. 查询选修课程号为'C2'的学生的学号和成绩:**sqlSELECT 学号, 成绩FROM 选课WHERE 课程号 = 'C2';

分析: 直接在选课表中查找课程号为'C2'的记录,并返回对应的学号成绩

**6. 查询选修了课程号为'C1'或'C5'的学生的学号和姓名:**sqlSELECT DISTINCT S.学号, S.姓名FROM 学生 SINNER JOIN 选课 X ON S.学号 = X.学号WHERE X.课程号 IN ('C1', 'C5');

分析: 使用联表查询,筛选出课程号为'C1'或'C5'的选课记录,并返回对应学生的学号姓名。使用DISTINCT关键字去重。

**7. 查询选课平均成绩超过85分的学生的学号和姓名:**sqlSELECT S.学号, S.姓名FROM 学生 SINNER JOIN ( SELECT 学号, AVG(成绩) AS 平均成绩 FROM 选课 GROUP BY 学号 HAVING AVG(成绩) > 85) AS T ON S.学号 = T.学号;

分析: 先使用子查询计算每个学生的平均成绩,并筛选出平均成绩大于85分的学生,然后与学生表联表查询,返回学生的学号姓名

**8. 查询选课成绩不及格(低于60分)3门及以上的学生的学号和姓名:**sqlSELECT S.学号, S.姓名FROM 学生 SINNER JOIN ( SELECT 学号, COUNT() AS 不及格门数 FROM 选课 WHERE 成绩 < 60 GROUP BY 学号 HAVING COUNT() >= 3) AS T ON S.学号 = T.学号;

分析: 先使用子查询统计每个学生不及格的课程数量,并筛选出不及格门数大于等于3的学生,然后与学生表联表查询,返回学生的学号姓名

**9. 查询选课人数超过100人的课程号和课程名:**sqlSELECT C.课程号, C.课程名FROM 课程 CINNER JOIN ( SELECT 课程号, COUNT() AS 选课人数 FROM 选课 GROUP BY 课程号 HAVING COUNT() > 100) AS T ON C.课程号 = T.课程号;

分析: 先使用子查询统计每门课程的选课人数,并筛选出选课人数大于100的课程,然后与课程表联表查询,返回课程的课程号课程名

**10. 查询至少选修'程军'老师所授全部课程的学生姓名:**sqlSELECT S.姓名FROM 学生 SWHERE S.学号 IN ( SELECT 学号 FROM 选课 WHERE 课程号 IN (SELECT 课程号 FROM 课程 WHERE 教师名 = '程军') GROUP BY 学号 HAVING COUNT(DISTINCT 课程号) = (SELECT COUNT(*) FROM 课程 WHERE 教师名 = '程军'));

分析: 先使用子查询找到'程军'老师所授的所有课程,然后找到选修了这些课程的学生,并筛选出选修课程数量等于'程军'老师所授课程数量的学生,最后返回这些学生的姓名

**11. 查询全部学生都选修的课程的课程号和课程名:**sqlSELECT C.课程号, C.课程名FROM 课程 CWHERE NOT EXISTS ( SELECT 1 FROM 学生 S WHERE NOT EXISTS ( SELECT 1 FROM 选课 X WHERE X.学号 = S.学号 AND X.课程号 = C.课程号 ));

分析: 使用嵌套NOT EXISTS子查询,先找到没有选修某门课程的学生,然后筛选出不存在这样的学生的课程,即所有学生都选修的课程,最后返回这些课程的课程号课程名

**12. 查询没有选课的学生学号和姓名:**sqlSELECT 学号, 姓名FROM 学生WHERE 学号 NOT IN (SELECT DISTINCT 学号 FROM 选课);

分析: 使用NOT IN子查询,先找到所有选课学生的学号,然后筛选出学生表中学号不在其中的学生,即没有选课的学生,最后返回这些学生的学号姓名

总结: 本文介绍了使用SQL语句查询学生选课系统数据库的常见方法,包括联表查询、子查询、聚合函数等。通过这些实例,可以帮助读者更好地理解和掌握SQL查询语言的使用技巧,并应用到实际的数据库操作中。

SQL查询实例:学生选课系统数据库实战

原文地址: https://www.cveoy.top/t/topic/XJg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录