mysql作业2

张开发
2026/5/13 19:49:15 15 分钟阅读
mysql作业2
(感觉题号写反了,应该是(order by 题号 desc),做题怎么是由难到易了?)1. 查询 01 课程比 02 课程成绩高的学生的信息及课程分数分析:确认学生的信息以及课程其中条件为01课程比02课程的大考虑用到外连接其中01课程的学生编号和01课程的分数和02课程的学生编号和02课程的分数相比较学生编号为连接基础1.1 查询同时存在 01 课程和 02 课程的情况分析:字面意思1.2 查询存在 01 课程但可能不存在 02 课程的情况(不存在时显示为 null )分析看到这题用join01课程 left join 02课程展示01课程以及与02课程相同的字段不同的字段默认为null1.3 查询不存在 01 课程但存在 02 课程的情况分析:not in的用法不存在01课程的信息但存在02课程2. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩分析将各个学生的平均成绩按照学生编号进行分组并判断分数大于等于60查询学生编号姓名平均分数。3. 查询在 SC 表存在成绩的学生信息分析确认条件为sc表中存在的学生可以用in条件来查询4.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )分析:将学生编号进行分组再用函数计算各个的选课总数和总成绩最后查出学生编号学生姓名4.1 查有成绩的学生信息分析确认条件为sc表中存在的学生所以sc.SId student.SId5.查询「李」姓老师的数量分析模糊查询 like6.查询学过「张三」老师授课的同学的信息分析:找到各表关联的相同信息最后再将教师表中为张三的老师为最终条件7.查询没有学全所有课程的同学的信息分析反向思维先查出课程信息为全的学生编号并将成绩表中的课程类型的总和与课程表中的课程类型总和相比较然后分别组成课程信息完全的学生编号组最后全盘否定 not in8.查询至少有一门课与学号为 01 的同学所学相同的同学的信息分析将学号为01的同学的所有课程分出来再将其中一门课程与其他学生的所有课程相比较符合其中一条条件的同学打印出来。9.查询和 01 号的同学学习的课程 完全相同的其他同学的信息10.查询没学过张三老师讲授的任一门课程的学生姓名分析首先找到名为张三的老师编号再找到此编号对应的课程编号通过已知的课程编号查找对应学生编号11.查询两门及其以上不及格课程的同学的学号姓名及其平均成绩分析先查询出sc表中分数小于60的并以学生编号分组然后having 小于60分的科目总数大于等于2的学生信息12.检索 01 课程分数小于 60按分数降序排列的学生信息分析找到sc表中的01课程字段并判断其是否小于60联合前面把学生信息展示出来并用order by score desc13.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩分析找到sc表将所有课程的平均成绩计算出来将学生进行分组14.查询各科成绩最高分、最低分和平均分以如下形式显示课程 ID课程 name最高分最低分平均分及格率中等率优良率优秀率及格为60中等为70-80优良为80-90优秀为90要求输出课程号和选修人数查询结果按人数降序排列若人数相同按课程号升序排列分析考察 case when xxx then 1 else 2 end15.按各科成绩进行排序并显示排名 Score 重复时保留名次空缺分析注意“保留名次空缺”意思是相同分数并列一名比这个分数低一位的为第三名不为第二名。15.1 按各科成绩进行排序并显示排名 Score 重复时合并名次分析注意“合并名次”意思是相同分数并列一名比这个分数低一位的为第二名不为第三名。count(distinct two.score)116.查询学生的总成绩并进行排名总分重复时保留名次空缺分析;将sc表中的不同学生的所有科目分数相加并按照学生编号进行排序在同一个表中自己与自己比较分出排名16.1 查询学生的总成绩并进行排名总分重复时不保留名次空缺分析与上述相同还是内连接不过条件改为不保留名次空缺只需要加一个自表分数相同17.统计各科成绩各分数段人数课程编号课程名称[100-85][85-70][70-60][60-0] 及所占百分比分析:与14题相通18.查询各科成绩前三名的记录分析算比自己分数大的记录有几条如果小于3 就select因为对前三名来说不会有3个及以上的分数比自己大了最后再对所有select到的结果按照分数和课程编号排名即可19.查询每门课程被选修的学生数分析先查询已选修课程的学生数量再以课程号进行分组20.查询出只选修两门课程的学生学号和姓名分析子查询21.查询男生、女生人数分析找到性别、人数两个字段统计不同性别的人数当然需要男女两个性别mysql中用in比较合适最后以性别来进行分组22.查询名字中含有「风」字的学生信息分析模糊查询where sname like %风23.查询同名同性学生名单并统计同名人数分析对student表进行内连接首先名字和性别要相同其次学号不能相同24.查询 1990 年出生的学生名单分析不会25.查询每门课程的平均成绩结果按平均成绩降序排列平均成绩相同时按课程编号升序排列分析将课程分组并分别计算平均成绩最后按照降序来排序26.查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩分析先找出总分数的平均数再找出平均数大于等85的最后查询满足条件的学生信息27.查询课程名称为「数学」且分数低于 60 的学生姓名和分数分析先查找课程为数学的cid再通过数学的cid来查询sc表中的数学成绩再来比较其是否小于6028.查询所有学生的课程及分数情况存在学生没成绩没选课的情况分析外连接看代码吧29.查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数分析先找到所有课程的分数分出大于70分的找到studen表和sc表中sid一样的学生30.查询不及格的课程分析看代码吧31.查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名分析联合查询条件语句需要sid作为连接体再根据题给出的条件写出来32.求每门课程的学生人数分析核心为以课程号作为分组条件的变量33.成绩不重复查询选修「张三」老师所授课程的学生中成绩最高的学生信息及其成绩分析这题我用的是嵌套先找到teacher表中名为张三的教师编号再根据course中的的教师编号找到课程编号再根据sc表找到学生编号最后与student表找关系即可,当然嵌套易懂且分步理解起来简单但套的多了找信息时容易看错建议分行写嵌套最好的方法是用连接34.成绩有重复的情况下查询选修「张三」老师所授课程的学生中成绩最高的学生信息及其成绩分析:单行信息用 多行信息用 in35.查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩分析用自连接 inner join其中只有课程编号不同36.查询每门功课成绩最好的前两名分析要比较课程成绩可以用sc表自己与自己比较然后在根据sidcidscore进行分组不需要用到max函数直接降序排序即可。37.统计每门课程的学生选修人数超过 5 人的课程才统计分析以sc表中的课程号为分组的依据分出不同课程学生的总数再来判断是否大于538.检索至少选修两门课程的学生学号分析先查找出所有学生选修的所有课程然后以学生编号为分组依据再判断课程的总和是否大于等于239.查询选修了全部课程的学生信息分析跟38题差不多只是以sc表中的sid与student表中的sid做联系查多项用in。但注意in关键字后面的子查询只能返回一列数据40.查询各学生的年龄只按年份来算分析curdate()是musql中自带的日期函数,作用为只能返回当前系统的日期41.按照出生日期来算当前月日 出生年月的月日则年龄减一分析timestampdiff(year, 生日, 当前日期) 按照真实生日计算的周岁年龄42.查询本周过生日的学生分析搞这么久以为一直是自己弄错了问ai说没错最后发现确实是没有本周过生日的学生43.查询下周过生日的学生分析在当前系统日期周加个144.查询本月过生日的学生分析week改为month会吧45.查询下月过生日的学生分析在month(curdate())后面加个1相信你一定很好奇为什么没有年“吧自己去试试吧当然你可以改改系统日期。

更多文章