DATABASE练习题操作及解析
将数据表建好写好如下题目1.查询 01 课程比 02 课程成绩高的学生的信息及课程分数因为需要全部的学生信息则需要在sc表中得到符合条件的SId后与student表进行join可以左连接也可以用右连接。1.1查询同时存在 01 课程和 02 课程的情况1.2查询存在 01 课程但可能不存在 02 课程的情况(不存在时显示为 null )这题需要使用join的语法02可能不存在用left join的右侧或right join 的左侧都可以这里以右连接为例1.3查询不存在 01 课程但存在 02 课程的情况2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩这道题只用根据学生ID把成绩分组对分组中的score求平均值最后在选取结果中avg大于60的并且这里可以用一般的连接就能联合查询3.查询在 SC 表存在成绩的学生信息4.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )5.查询「李」姓老师的数量6.查询学过「张三」老师授课的同学的信息7.查询没有学全所有课程的同学的信息这里容易误区因为可能有学生没选导致查不到就直接先把这些选的学生查出来然后查之外的学生8.查询至少有一门课与学号为 01 的同学所学相同的同学的信9.查询和 01 号的同学学习的课程 完全相同的其他同学的信息第一层01 有的课该学生不能没有第二层该学生有的课01不能没有双重保证完全一样10.查询没学过张三老师讲授的任一门课程的学生姓名11.查询两门及其以上不及格课程的同学的学号姓名及其平均成绩12.检索 01 课程分数小于 60按分数降序排列的学生信息13.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩14.查询各科成绩最高分、最低分和平均分以如下形式显示课程 ID课程 name最高分最低分平均分及格率中等率优良率优秀率及格为60中等为70-80优良为80-90优秀为90要求输出课程号和选修人数查询结果按人数降序排列若人数相同按课程号升序排列15.按各科成绩进行排序并显示排名 Score 重复时保留名次空缺1.窗口函数DENSE_RANK并列不跳号2.RANK()并列跳号16.查询学生的总成绩并进行排名总分重复时不保留名次空缺17.统计各科成绩各分数段人数课程编号课程名称[100-85][85-70][70-60][60-0] 及所占百分比18.查询各科成绩前三名的记录19.查询每门课程被选修的学生数20.查询出只选修两门课程的学生学号和姓名21.查询男生、女生人数22.查询名字中含有「风」字的学生信息23.查询同名同性学生名单并统计同名人数24.查询 1990 年出生的学生名单25.查询每门课程的平均成绩结果按平均成绩降序排列平均成绩相同时按课程编号升序排列26.查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩27.查询课程名称为「数学」且分数低于 60 的学生姓名和分数28.查询所有学生的课程及分数情况存在学生没成绩没选课的情况29.查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数30.查询不及格的课程31.查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名32.每门课程的学生人数33.成绩不重复查询选修「张三」老师所授课程的学生中成绩最高的学生信息及其成绩34.成绩有重复的情况下查询选修「张三」老师所授课程的学生中成绩最高的学生信息及其成绩35.查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩36.查询每门功成绩最好的前两名37.统计每门课程的学生选修人数超过 5 人的课程才统计。38.检索至少选修两门课程的学生学号39.查询选修了全部课程的学生信息40.查询各学生的年龄只按年份来算41.按照出生日期来算当前月日 出生年月的月日则年龄减一42.查询本周过生日的学生select *from studentwhere WEEKOFYEAR(student.Sage)WEEKOFYEAR(CURDATE());43.查询下周过生日的学生select *from studentwhere WEEKOFYEAR(student.Sage)WEEKOFYEAR(CURDATE())1;44.查询本月过生日的学生select *from studentwhere MONTH(student.Sage)MONTH(CURDATE());45.查询下月过生日的学生select *from studentwhere MONTH(student.Sage)MONTH(CURDATE())1;