MySql练习(查询“01“课程比“02“课程成绩高的学生的信息及课程分数) |
您所在的位置:网站首页 › 大于等于90 › MySql练习(查询“01“课程比“02“课程成绩高的学生的信息及课程分数) |
文章目录
1、学生表2.课程表3.教师表4.成绩表解析:1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数2、查询 平均成绩大于等于60分的同学 的 学生编号和学生姓名和平均成绩3.查询在sc表中不存在成绩的 学生信息。4、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩5、查询"李"姓老师的数量6、查询学过"张三"老师授课的同学的信息7、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息8、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
1、学生表
Student(SID,Sname,Sage,Ssex) –SID 学生编号,Sname 学生姓名,Sage 年龄,Ssex 学生性别 编号 姓名 年龄 性别 1 赵雷 20 男 2 钱电 20 男 3 孙风 21 男 4 吴兰 18 女 5 孙兰 17 女 2.课程表Course(CID,Cname,TID) –CID --课程编号,Cname 课程名称,TID 教师编号 课程号 课程名称 教师编号 1 语文 2 2 数学 1 3 英语 3 3.教师表Teacher(TID,Tname) –TID 教师编号,Tname 教师姓名 教师编号 教师名 1 张三 2 李四 3 王五 4.成绩表SC(SID,CID,score) –SID 学生编号,CID 课程编号,score 分数 学生编号 课程编号 分数 1 1 80 1 2 71 1 3 87 2 1 88 2 2 70 2 3 89 3 1 68 3 2 78 3 3 87 4 1 67 4 2 58 4 3 89 5 1 56 5 2 89 6 3 38 解析:1.两个表有外键才可以直接关联。(即要有同一个属性) 2.课程表 或 成绩表 是重要的中介,比如:教师表和成绩表需要课程表来连接 3.模式: Select 结果需要的属性 From 需要用到的表 Where 条件 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数分析:必须要用:学生信息(Student)和课程分数(SC) 可能要用: Course、SC select s.*, s1.score 1score , s2.score 2score //需要学生信息和两科分数 from Student s, SC s1, SC s2 //一张表两个别名 在表的数据的所有组合里找满足条件的 where //条件的组合 s.SID = s1.SID and //找同一个人 s.SID = s2.SID and s1.CID ='01' and //比01课程比02高 s2.CID = '02' and s1.score > s2.score;//SC表确定了课程是01,所以那一列肯定01分数 2、查询 平均成绩大于等于60分的同学 的 学生编号和学生姓名和平均成绩学生姓名(在Student表),平均成绩(在SC表找) mysql函数:avg(变量):对变量求平均 count()组里的数据条数、max()、min()、sum()求和 分组:group by SID //根据学生的SID进行分组,保证每一组都是同一个学生 having avg(score) >= 60;//条件:对同一个同学的分数求平均;要大于60 select s.SID,s.sname,avg(c.score) avgscore from Student s,SC c where s.SID = c.SID //两个表建立连接的外键 group by c.SID having avc(c.score) >= 60;执行顺序:where>group>having(优先级) 父子查询:先子查询 3.查询在sc表中不存在成绩的 学生信息。Student 和SC select * from Student //在学生信息表里找SID不在SC表的 where SID not in ( select distinct(SID)//子查询 在学生成绩表里查询所有不重复的id(即每个学生的id)并返回 from sc) ; 4、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩Student和SC from SC group by SID;//相同ID在一组 select s.SID,s.sname,count(*),sum(c.score) //最后计算并返回信息 from Student s,SC c where s.SID = c.SID //先连接表 group by c.SID //再分组 5、查询"李"姓老师的数量Teacher 模糊查询:like ‘李%’ select conut(*) from Teacher where tname like '李%'; 6、查询学过"张三"老师授课的同学的信息Student、Teacher,SC,Corese select s.* from Student s,Teacher t,SC sc,Courese c where s.SID = sc.SID and //连接 sc.CID = c.CID and c.TID = t.TID and t.tname = '张三';//筛选 7、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息Student,SC select s.* from Student s,SC s1,SC s2 //一个表起俩名,就可以同时查两属性 where s.SID = s1.SID and s1.SID=s2.SID and s1.CID='01' and s2.CID ='02'; 8、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩分析: 1.需要的表:Student、SC 2.先过滤在分组在统计判断: from SC where SC.score < 60 //将成绩小于60的人按SID分组,然后判断每个SID挂科数量 group by SC.SID having count(*) > 1 方法1:是不及格的平均 select s.SID,s.sname,avg(c.score) //同一个SID在一组,计算其平均成绩 from Student s,SC c where s.SID = c.SID and //需要同时满足的条件;按SID相等连接起来再筛选 c.score 1;方法2:所有科目的平均 select s.SID,s.sname,avg(c.score) from Student s,SC c where s.SID = c.SID and s.SID in (select SID //在成绩表里找 挂科数大于1的人的SID from SC where SC.score 1); |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |