多表查询练习:
Student 学生信息表(Student(SID,Sname,Sage,Ssex) -SID 学生编号,Sname 学生姓名,Sage 年龄,Ssex 学生性别)
SC学生课程成绩表( SC(SID,CID,score) --SID 学生编号,CID 课程编号,score 分数 )
course课程信息表(Course(CID,Cname,TID) --CID --课程编号,Cname 课程名称,TID 教师编号)
teacher表(Teacher(TID,Tname) --TID 教师编号,Tname 教师姓名)
查询语句练习:
1.查询"01"课程比"02"课程成绩高的学生的信息及课程分数
select a.*, b.score as ‘01课程分数’, c.score as ‘02课程分数’ //as取别名
from student a,SC b,SC c
where a.SID = b.SID and a.SID = c.SID and b.CID = 1 and c.CID = 2 and b.score > c.score;
取别名和as关键字:
2、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
select a.SID , a.Sname ,avg(b.score) avg_score
from Student a,SC b
where a.SID = b.SID group by a.SID having avg(b.score) >= 60; //因为要根据每一个的成绩作平均值再排序,所以用到group by
group by和having的用法
3、查询在sc表中不存在成绩的学生信息。
select * from Student where SID not in (select distinct SID from SC);
distinct关键字:
4、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
select a.SID, a.Sname,count(b.CID) as count, sum(b.score) as sum_score
from Student a, SC b
where a.SID = b.SID group by a.SID;
5.查找有成绩但不是学生的学生学号、课程号、成绩
select *from SC where SID not in(select distinct SID from student)6.查询李姓老师的数量
select count(TID) from Teacher where Tname like '李%';
like关键字:
mysql入门很简单中对count和sum的描述(疑惑点?): count()记录条数;sum对某个字段进行求和
7、查询学过"张"老师授课的同学的信息
select * from student
where SID in(select distinct SID from SC where CID in(select distinct CID from Course where TID in(select TID from Teacher where Tname like 'zhang')));
//通过Tname在teacher表里查老师的TID,通过TID在SC表里查SID,通过SID在student表里查Sname.
8、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
select Student.*
from Student , SC
where Student.SID = SC.SID and SC.CID = '02' and exists (Select 1 from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = '01') order by Student.SID
exists关键字的用法:
order by对查询结果进行排序的关键字:
9、查询两门及其以上课程大于70分的同学的学号,姓名及其平均成绩
select s.SID , s.sname , avg(score) as avg_score
from student s , sc
where s.SID = SC.SID and s.SID in (select SID from SC where score>70 group by SID having count(1) >= 2) group by s.SID , s.sname
//学号在选课表SC里面,以学号为组的成绩大于70并且数量大于两门的学生学号;再以学号和学生姓名为一组,找出学生姓名和学号
查找课程号为2的低于平均分的同学的课程分和学学号及姓名(下面的查询语句对,上面的错误太多,分析了一下错因)(子连接)
含有in的子连接:
10.查找w同学的选课课程名称以及对应的成绩(隐式内连接)
-- 查找w同学的课程名以及对应的成绩
SELECT student.Sname, course.`Cname`,sc.`score`FROM sc,student,course WHERE sc.`CID`=course.`CID` AND student.`Sname`="w" AND student.`Sid`=sc.`SID`;
11.显示内连接 (inner) join on +条件