MySQL多表查询面试题一

其中分析题意,学生表student是与成绩表score关联,课程表course与教师表teacher关联,由此可以先确定关联关系,学生表为s,课程表为c,教师表为t,成绩表为o。s.s_id=o.s_id,c.t_id=t.t_id

(1)查询所有学生的学号、姓名、选课数、总成绩

学生表与成绩表关联,通过成绩来确认选课数

select s.s_id 学号,s.s_name 姓名,count(s_score) 选课数,sum(s_score) 总成绩 from score o inner join student s on o.s_id = s.s_id group by s.s_id;

(2)查询学过"张三"老师所教的所有课的同学的学号、姓名

运用子查询来查询从学生的学号查到科目中有相同学号后再通过课程编码去找教师编码最后找到张三

select s.s_id,s.s_name from student where s_id in(select o.s_id from score,course,teacher where o.c_id= c.c_id and c.t_id=t.t_id and t.t_name='张三');

(3) 查询和"02"号的同学学习的课程完全相同的其他同学学号和姓名

运用子查询先在成绩表中找到学号为02的课程编码过滤出每个人的课程,再对02学习的课程编码通过having进一步过滤后与其他人学习的课程编码与02的比较是否相同来筛选出与02所学课程完全相同的学号姓名。

select s_id from score where c_id in(select c_id from score where s_id='02') group by s_id having count(*) = (select count(*) from score where s_id = '02');

(4)按平均成绩从高到低显示所有学生的"数据库"(c_id='04)、"企业管理"(c_id='01')、"英语"(c_id='06) 三门的课程成绩,按如下形式显示:学生ID,数据库,企业管理,英语,有效课程数,有效平均分

题目可得所有学生学习的课程内容有数据库c_id=04,企业管理c_id=01,英语c_id=06共三门,

select s_id as 学号,c_id='04' as 数据库,c_id='01' as 企业管理,c_id='06' as 英语,(select count(distinct o.c_id) from score o where s.s_id = o.s_id)as 有效课程数, (select avg(o.s_score) from score o where s.s_id=o.s_id ) as 有效平均分 order by 平均成绩 desc;

(5) 使用分段100-85,85-70,70-60,\<60来统计各科成绩,分别统计各分数段人数:课程ID和课程名称

select o.c_id as 课程ID,c_name as 课程名称,sum(case when s_score between 85 and 100 then 1 else 0 end) as '100-85',sum(case when s_score between 70 and 85 then 1 else 0 end) as'85-70',sum(case when s_score between 60 and 70 then 1 else 0 end) as '70-60',sum(case when s_score < 60 then 1 else 0 end) as '\<60' from score,course where o.c_id = c.c_id group by o.c_id;

综上,如若有误欢迎指出

相关推荐
Ivanqhz22 分钟前
正余弦位置编码(Sinusoidal Positional Encoding)
java·linux·数据库
Ivanqhz34 分钟前
层归一化、残差、前馈网络与激活函数简述
服务器·数据库·人工智能·深度学习·算法
Java后端的Ai之路41 分钟前
Python进阶探索23 - Python中的Time与Datetime模块
开发语言·数据库·python·datetime·time
通信瓦工2 小时前
利用浊度和电导率测量确定乙二醇基流体的质量
网络·数据库·ai
小马同学-3 小时前
mysql数据库原理
数据库·mysql
东方护航数据恢复(深圳)3 小时前
政务信创案例:达梦 DM8 数据库掉电页损坏,48 小时修复实录【东方护航数据恢复深圳店】
数据库·数据恢复·it运维·服务器数据恢复·二次开盘·硬盘开盘
AC赳赳老秦4 小时前
OpenClaw 数据引用规范自动生成:为公开数据构建可信来源标注与标准引用体系
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
小蒜学长5 小时前
校园社团招新网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·校园社团招新网站
布莱克6056 小时前
MySQL 增删改查(CRUD)语法详解
数据库·mysql·增删改查
Dovis(誓平步青云)6 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化