前言:
创建以下四张表:①:课程表
②:成绩表
③:学生表
④:教师表
1.查询课程编号为“”01“”的课程比“02”的课程成绩高的所有学生的学号(重点)
SELECT
a.s_id "s_no",
c.s_name,
a.s_score "01",
b.s_score "02"
FROM
( SELECT s_id, c_id, s_score FROM score WHERE c_id = '01' ) AS a
INNER JOIN ( SELECT s_id, c_id, s_score FROM score WHERE c_id = '02' ) AS b ON a.s_id = b.s_id
INNER JOIN student AS c ON c.s_id = a.s_id
WHERE
a.s_score > b.s_score
结果如图所示
浅谈思路:( SELECT s_id, c_id, s_score FROM score WHERE c_id = '01' ) AS a 首先先从课程表中查询出选了01课的所有学生建为a表
INNER JOIN ( SELECT s_id, c_id, s_score FROM score WHERE c_id = '02' ) AS b ON a.s_id = b.s_id 同样从课程表中查询选了02课的所有学生建为b表,并且进行连接。连接条件为:
ON a.s_id = b.s_id 采用学生编号将这两张表连接起来
INNER JOIN student AS c ON c.s_id = a.s_id 再连接一张学生表,把学生的名字查询出来
WHERE
a.s_score > b.s_score 查询01课的成绩大于02课的成绩
SELECT
a.s_id "s_no",
c.s_name,
a.s_score "01",
b.s_score "02"
FROM
最后查询出学生编号,学生姓名,学生的01课程成绩,02课程成绩即可。
2.查询出平均成绩大于60分的学生的学号和成绩
Select s_id,avg(s_score)
from score
GROUP BY s_id HAVING avg(s_score)>60
查询结果如图所示
浅谈思路:
Select s_id,avg(s_score) 查询出学生的ID,和成绩的平均值
from score 从成绩表中查询
GROUP BY s_id HAVING avg(s_score)>60
group by 分组 [学号]
having 分组条件 [平均成绩大于60分:avg(成绩 ) >60]
引用一下https://blog.csdn.net/qq_38962853/article/details/73838626解释一下group by的用法
当SELECT 后 既有 表结构本身的字段,又有需要使用聚合函数(COUNT(),SUM(),MAX(),MIN(),AVG()等)的字段,就要用到group by分组,查询的限定条件里有需要用聚合函数计算的字段时也需要用分组,比如:
select avg(grade) from cs
查询选课表(cs)中学生的总成绩(grade);这里就不用分组;
又如:
select sno,sum(grade) from cs group by sno
查询选课表里每个学生的总成绩,这里就要用分组,分组的依照字段必须是select 后没有被计算过的原始字段;
以上是分组用法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性