MySql练习(查询“01“课程比“02“课程成绩高的学生的信息及课程分数)

您所在的位置:网站首页 大于等于90 MySql练习(查询“01“课程比“02“课程成绩高的学生的信息及课程分数)

MySql练习(查询“01“课程比“02“课程成绩高的学生的信息及课程分数)

2024-01-02 23:01| 来源: 网络整理| 查看: 265

文章目录 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