IT评测·应用市场-qidao123.com技术社区

标题: SQL查询技巧:深入解析学生选课体系数据库 [打印本页]

作者: 南飓风    时间: 2024-12-17 02:47
标题: SQL查询技巧:深入解析学生选课体系数据库
        在大学的学生选课体系中,数据库的管理和查询是日常操作中的告急部门。本文通过一系列具体的SQL查询示例,深入解析如何高效地从数据库中获取所需信息,包括学生选课环境、结果分析、教师课程管理等。
体系数据库布局

起首,我们有一个包含以下表的数据库:
course - 存储课程信息

建表

  1. CREATE TABLE `course` (
  2.   `CNO` varchar(5) NOT NULL,
  3.   `CNAME` varchar(10) NOT NULL,
  4.   `TNO` varchar(10) NOT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
导入数据

  1. INSERT INTO `course` VALUES ('3-105', '计算机导论', '825');
  2. INSERT INTO `course` VALUES ('3-245', '操作系统', '804');
  3. INSERT INTO `course` VALUES ('6-166', 'Java编程', '856');
  4. INSERT INTO `course` VALUES ('9-888', '马克思主义', '100');
复制代码
查询数据是否导入成功

  1. select * from course;
复制代码
grade - 存储结果品级

 建表

  1. CREATE TABLE `grade` (
  2.   `low` int(3) DEFAULT NULL,
  3.   `upp` int(3) DEFAULT NULL,
  4.   `rank` char(1) DEFAULT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
导入数据

  1. INSERT INTO `grade` VALUES ('90', '100', 'A');
  2. INSERT INTO `grade` VALUES ('80', '89', 'B');
  3. INSERT INTO `grade` VALUES ('70', '79', 'C');
  4. INSERT INTO `grade` VALUES ('60', '69', 'D');
  5. INSERT INTO `grade` VALUES ('0', '59', 'E');
复制代码
查询数据是否导入成功

  1. select * from grade;
复制代码
score - 存储学生结果

 建表

  1. CREATE TABLE `score` (
  2.   `SNO` varchar(3) NOT NULL,
  3.   `CNO` varchar(5) NOT NULL,
  4.   `DEGREE` decimal(10,1) NOT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
导入数据

  1. INSERT INTO `score` VALUES ('103', '3-245', '86.0');
  2. INSERT INTO `score` VALUES ('105', '3-245', '75.0');
  3. INSERT INTO `score` VALUES ('109', '3-245', '68.0');
  4. INSERT INTO `score` VALUES ('103', '3-105', '92.0');
  5. INSERT INTO `score` VALUES ('105', '3-105', '88.0');
  6. INSERT INTO `score` VALUES ('109', '3-105', '76.0');
  7. INSERT INTO `score` VALUES ('101', '3-105', '64.0');
  8. INSERT INTO `score` VALUES ('107', '3-105', '91.0');
  9. INSERT INTO `score` VALUES ('108', '3-105', '78.0');
  10. INSERT INTO `score` VALUES ('101', '6-166', '85.0');
  11. INSERT INTO `score` VALUES ('107', '6-106', '79.0');
  12. INSERT INTO `score` VALUES ('108', '6-166', '81.0');
复制代码
查询数据是否导入成功

  1. select * from score;
复制代码
student - 存储学生信息

 建表

  1. CREATE TABLE `student` (
  2.   `SNO` varchar(3) NOT NULL,
  3.   `SNAME` varchar(4) NOT NULL,
  4.   `SSEX` varchar(2) NOT NULL,
  5.   `SBIRTHDAY` datetime DEFAULT NULL,
  6.   `CLASS` varchar(5) DEFAULT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
导入数据

  1. INSERT INTO `student` VALUES ('108', '曾华', '男', '1977-09-01 00:00:00', '95033');
  2. INSERT INTO `student` VALUES ('105', '匡明', '男', '1975-10-02 00:00:00', '95031');
  3. INSERT INTO `student` VALUES ('107', '王丽', '女', '1976-01-23 00:00:00', '95033');
  4. INSERT INTO `student` VALUES ('101', '李军', '男', '1976-02-20 00:00:00', '95033');
  5. INSERT INTO `student` VALUES ('109', '王芳', '女', '1975-02-10 00:00:00', '95031');
  6. INSERT INTO `student` VALUES ('103', '陆君', '男', '1974-06-03 00:00:00', '95031');
复制代码
查询数据是否导入成功

  1. select * from student;
复制代码
teacher - 存储教师信息

 建表

  1. CREATE TABLE `teacher` (
  2.   `TNO` varchar(3) NOT NULL,
  3.   `TNAME` varchar(4) NOT NULL,
  4.   `TSEX` varchar(2) NOT NULL,
  5.   `TBIRTHDAY` datetime NOT NULL,
  6.   `PROF` varchar(6) DEFAULT NULL,
  7.   `DEPART` varchar(10) NOT NULL
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
导入数据

  1. INSERT INTO `teacher` VALUES ('804', '李诚', '男', '1958-12-02 00:00:00', '副教授', '计算机系');
  2. INSERT INTO `teacher` VALUES ('856', '张旭', '男', '1969-03-12 00:00:00', '讲师', '电子工程系');
  3. INSERT INTO `teacher` VALUES ('825', '王萍', '女', '1972-05-05 00:00:00', '助教', '计算机系');
  4. INSERT INTO `teacher` VALUES ('831', '刘冰', '女', '1977-08-14 00:00:00', '助教', '电子工程系');
复制代码
查询数据是否导入成功

  1. select * from teacher;
复制代码
SQL查询示例与分析

1. 查询特定班级的学生人数

查询“95031”班的学生人数
  1. SELECT COUNT(1) FROM student WHERE class = '95031';
复制代码
这条查询统计了班级“95031”的学生人数,使用COUNT(1)确保每个学生都被计数。
2. 查询最高分的学生信息

查询Score表中的最高分的学生学号和课程号
  1. select SNO, CNO, DEGREE
  2. from score
  3. where DEGREE = (select max(DEGREE) from score);
复制代码
通过子查询找到最高分,然后查询全部获得这一分数的学生信息。
3. 查询结果在特定区间的学生编号

查询最低分大于70,最高分小于90的Sno列
  1. SELECT SNO FROM score WHERE DEGREE BETWEEN 70 AND 90 GROUP BY SNO;
复制代码
这条查询找出了结果在70到90分之间的全部学生编号,使用BETWEEN简化了查询条件。
4. 查询特定班级所选课程的均匀分

查询“95033”班所选课程的均匀分
  1. select CNO, AVG(DEGREE) as avg_score
  2. from score
  3. where SNO in (select SNO from student where class = '95033')
  4. group by CNO;
复制代码
通过子查询找到“95033”班的全部学生,然后盘算他们每门课程的均匀结果。
5. 查询结果高于特定学生的结果记载

查询选修“3-105”课程的结果高于“109”号同学结果的全部同学的记载。
  1. select stu.*
  2. from student stu
  3.          join score sco on stu.SNO = sco.SNO
  4. where sco.CNO = '3-105'
  5.   and DEGREE > (select DEGREE
  6.                 from score
  7.                 where SNO = '109' and CNO = '3-105');
复制代码
这条查询起首找到课程“3-105”中编号为“109”的学生的结果,然后找出全部结果高于这一分数的学生记载。
6. 查询选修多门课程且结果非最高的学生记载

查询score中选学一门以上课程的同学中分数为非最高分结果的记载。
  1. select sco1.* from score sco1 where exists(
  2.     select 1 from score sco2 where sco2.SNO = sco1.SNO and DEGREE < (
  3.         select max(DEGREE)  from score sco3 where sco3.SNO = sco1.SNO))
  4.     and sco1.SNO in (
  5.         select SNO from score group by SNO having count(CNO) > 1);
复制代码
通过子查询找到选修多门课程的学生,然后筛选出结果不是最高的记载。
7. 查询选修学生多于5人的教师姓名

查询选修某课程的同学人数多于5人的教师姓名。
  1. select tea.TNAME from teacher tea
  2.     join course cou on cou.TNO = tea.TNO
  3.     where cou.CNO in (select CNO from score group by CNO having count(SNO) > 5);
复制代码
这条查询起首找出选修学生多于5人的课程,然后查询这些课程的任课教师姓名。
8. 查询差别系差别职称的教师

查询“盘算机系”与“电子工程系“差别职称的教师的Tname和Prof
  1. select TNAME, PROF from teacher where DEPART in ('计算机系', '电子工程系');
复制代码
通过限定部门和职称,查询特定条件下的教师信息。
9. 查询结果低于课程均匀结果的学生

查询结果比该课程均匀结果低的同学的结果表
  1. select CNO, avg(DEGREE) from score where CNO = CNO group by CNO;
  2. select * from score sco where DEGREE < (select avg(DEGREE) from score where CNO = sco.CNO );
复制代码
这条查询找出了全部结果低于其所在课程均匀结果的学生记载。
10. 查询全部任课教师的信息

查询全部任课教师的Tname和Depart
  1. select TNAME, DEPART from teacher where TNO in (select  TNO from course);
复制代码
通过关联查询,找出全部有授课记载的教师信息。
结论

        通过这些SQL查询示例,我们可以看到如何有效地从教育数据库中提取信息,无论是进行学生结果分析、教师课程管理照旧班级学生统计。这些技巧对于数据库管理员和教育工作者来说都好坏常实用的。希望这篇文章能资助你更好地理解和使用SQL进行数据查询。如果你有任何疑问或需要进一步的资助,请随时联系。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4