1、学生表
Student(SID,Sname,Sage,Ssex)
–SID 学生编号,Sname 学生姓名,Sage 年龄,Ssex 学生性别
2.课程表
Course(CID,Cname,TID)
–CID --课程编号,Cname 课程名称,TID 教师编号
3.教师表
Teacher(TID,Tname)
–TID 教师编号,Tname 教师姓名
4.成绩表
SC(SID,CID,score)
–SID 学生编号,CID 课程编号,score 分数
以上就是数据库中对应的表
1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
分析:
(1)确定表课程分数在 sc 表,学生信息在 student 表。
(2)查询课程 01 成绩和查询课程 02 的成绩并且还要比大小那么就应该是同一张表用了两次,最后,sc和student表相关的变量就是SID。所以最后SQL语句如下:
select a.* ,b.score 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;
结果:
2、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
分析:
(1)确定表:成绩在sc表中,同学编号,同学姓名,在Student表中。
(2)要输出平均成绩需要利用 AVG函数,平均成绩是按照学号分组,将所有成绩利用AVG函数计算出来的。
SQL语句如下:
select a.SID ,a.Sname , AVG(b.score) from student a ,sc b where a.SID = b.SID group by a.SID having AVG(score)> 60;
3、查询在sc表中不存在成绩的学生信息。
分析
(1)确定表:成绩sc表,学生信息 student表
(2)不存在,那么就会用到 not in 语句。只要存在成绩就会在sc表中有记录,所以sc表中的SID就代表了有成绩的学生的SID,那么只要将sc表中的SID去重,student.SID not in (sc表中的SID)即可。
SQL语句如下:
select student.* from student where student.SID not in (select distinct sc.SID from sc );
结果:
4、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
分析:
(1)确定表:student,sc
(2)选课总数需要用count()函数来统计,以学生编号为分组进行分组查询,并且总成绩应该用sum()函数
SQL语句如下:
select a.SID,a.Sname,count(b.CID) as count ,sum(b.score) as sum from student a,sc b where a.SID = b.SID group by a.SID;
5、查询"李"姓老师的数量
分析:
(1)确定表:老师姓名只在Teacher表中出现过
(2)李姓老师就需要用到模糊查询,统计数量需要用到count()函数
SQL语句如下:
select count(Tname) from Teacher where Tname like ‘李%’;
6、查询学过"张三"老师授课的同学的信息
分析:
(1)确定表,张三老师在Teacher表中,课程表和学生编号的联系存在于sc表,同学信息存在于student表
(2)如果要查到这样的同学,第一步,我要查到张三老师的授课号,第二步,我要在sc表中以进行去重查询,如果CID集合中有这个授课号,那么与学生表建立连接,返回此学生的SID。
SQL语句如下:
select * from student where SID in ( select distinct SID from sc where CID = (select CID from course where TID = (select TID from teacher where Tname = ‘张三’)));
7、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
分析
(1)确定表课程编号存在于sc表和course表,只有sc表于student有直接连接,同学信息存在于student表中
(2)学号编号01 也学过编号02的课程,这是一个判断,所以需要利用Exists查询来返回真假值。这里也是同一张表用了两次
SQL语句如下
select student.* from student ,sc a where student.SID = a.SID and a.CID = 1 and exists(select 1 from sc b where a.SID = b.SID and b.CID = 2);