数据库练习题(1)

一、表的数据结构以下:数据结构

student表(sno,sname,sage)--学号,姓名,学生年龄函数

course表(cno,cname,tno)--课程代码,课程名称,老师工号spa

sc表(sno,cno,score)--学号,课程代码,分数select

teacher表(tno,tname)--老师工号,老师姓名方法

1)查询'001'课程比'002'课程成绩高的的全部学生学号统计

分析:相关的表sc,数据

方法1:分别找出001课程与002课程全部信息,而后从两个表中找出001大于002的学生学号,这种方法会用到两个子查询,会比较慢查询

方法2:用联合查询,把第1个SC跟第2个SC经过学号联合再一块儿,而后找出联合表1中001的课程,表2中002的课程,且表1中001课程要大于表2中002课程vi

语句:co

select s1.sno from sc s1,sc s2

where s1.sno = s2.sno and s1.cno = '001' and s2.cno = '002' and s1.score > s2.score;

2)查询平均成绩大于60分的学生学号和平均成绩

分析:相关的表sc,平均成绩:avg(score)

方法1:用1个子查询,经过学生学号找出全部学生的平均成绩,而后从这个 表格中找出大于60分的学生学号及平均成绩便可

方法2:显然第1个方法,比较冗余,所以在进行分组查询时,进行条件限制一下就能够了,group by sno having avg(score)>60

语句:

select sno,avg(score) from sc group by sno having avg(score)>60;

注意:

查询学生的平均成绩时,必须先对表进行分组查询。

3)查询全部学生的学号,姓名,选课数,总成绩。

分析:相关的表有学生表student,成绩表sc

方法:把student表跟sc表经过学号联合,而后经过学号进行分组,统计出每一个学号的课程的总数(count),及总成绩(sum);

语句:

select s1.sno,s1.sname,count(s2.cno),sum(s2.score)

from student s1,sc s2

where s1.sno = s2.sno group by s1.sno;

4)查询姓李老师的个数

分析:相关的表teacher

方法:统计个数用count函数,查询李姓老师,用like'李%'

语句:

select count(tname) from teacher where tname like'李%';

注意:like前面要加上where

5)查询全部课程成绩小于60分的学生姓名和学号

分析:相关的表student,score

方法:把这两个表student与score经过学号进行联合,经过学号进行分组(group by),而且选出全部课程成绩小于60的学生;

又因是全部的课程成绩都要小于60,那么找出每一个学生中全部课程中最大的课程,当比最大课程还小时,那么这个学生的全部课程确定全部课程确定都小于60(max(score)<60)

语句:

select s1.sno,s1.sname

from student s1,score s2

where s1.sno = s2.sno group by sno having max(score) < 60;

相关文章
相关标签/搜索