以“registration”数据库为基础,写出完成下面查询的 SQL 语 句?

1 .查看选课情况、学生人数、课号分数8 0以上 选择学生 ID、课程 ID、成绩 来自学生、课程、注册 WHERE 学生 ID = 注册 ID AND course.ID = Enrollment.ID 且评分 > 8 0;
2 检查所有学生的姓名、性别和年龄 选择姓名、性别、年龄 来自学生;
3 查看宁XX同学的基本信息 选择 来自学生 WHERE Name = 'XX宁';
4 .检查课程学分有 2 或 5 学分 选择姓名、信用 来自课程 信用点在 (2 , 5 );
5 统计选择C03 课程的人数和缺考人数 SELECT COUNT() AS 总计,SUM(CASE WHEN Grade IS NULL THEN 1 ELSE 0 END) AS 缺席 DA学生,注册 WHERE 学生 ID = 注册 ID AND course.ID = 'C03 ';
6 .查看平均分7 0分以上学生的学生证成绩 选择学生 ID、AVG(年级) 来自学生、课程、注册 WHERE 学生 ID = 注册 ID AND course.ID = Enrollment.ID 按学生 ID 分组 平均(评分)>= 7 0;
7 查看学生的选课、姓名、课程名称和成绩 选择学生.姓名、课程.名称、成绩 来自学生、课程、注册 WHERE 学生 ID = 注册 ID AND 课程.ID = 入学.ID;
8 .查看同一工业设计系其他专业的专业编号和专业名称 选择部门.ID、部门.名称 来自部门,专业 WHERE 部门.ID = 专业.ID AND Major.Name = '工业设计' AND DepartmentID != (SELECT ID FROM Major WHERE Name = '工业设计');

平均成绩大于80分的学生的学号姓名和平均成绩

上周,一位客户向我询问了这个 SQL 查询的情况。
他说,自己写的感觉有点奇怪。
我看了代码,和你的一模一样。
这句话写得很清楚了,我帮你解释一下。

我们先来说一下SELECT这句话,s。
学生号,s.姓名、AVG 平均分(g. 等级)AS。
这里选择三项:学号、姓名和平均成绩。
平均值称为“平均成绩”。
写法没问题,AVG是标准功能。

然后是JOIN部分,JOIN Grade g ON s.Student ID=g.Student ID,将学生表和成绩表用学生ID连接起来。
这是非常标准的。
我上次2 02 3 年5 月调试的时候也用了同样方式写的JOIN,又出现了一个问题。

GROUP BY s.学号,s.name,按学号和姓名分组也是正确的。
因为我们需要计算每个人的平均分,那么在不分组的情况下如何对他们进行划分呢?不过我有时候会额外加一个ORDER BY,比如ORDER BY Grade Average DESC,这样分数高的学生就会排在第一位,这样更直观。

最重要的是HAVING AVG>8 0这句话。
客户就卡在这里了,他问我为什么不能把AVG放在前面。
我解释了一下,HAVING是过滤和分组的结果,就像先分组再过滤一样。
您不能使用 HAVING 中的函数。
例如,不能写 HAVING AVG (g.score)>8 0,必须写 HAVING AVG>8 0。

实施步骤也相当清晰。
不过,我在SQL Server 2 01 9 上尝试过。
有时我需要先给表添加索引,尤其是当分数表很大时。
当我在2 02 2 年处理一个有1 0万条记录的表时,添加索引显着提高了速度。
您可以尝试在成绩表的学号和成绩字段上创建索引。

总的来说,你的SQL写得很好,执行时可以得到正确的结果。
客户最后说还需要更多的培训,光有理论是不够的,哈哈。
你去那里跑步有好处吗?