MySQL经典练习题(二)

1、查询Score表中的最高分的学生学号和课程号。

select sno,cno,degree

from score

where DEGREE = (select max(DEGREE)max_grade from score )

2、查询‘3-105’号课程的平均分。

select cno,avg(DEGREE) avg_grade

from score

where cno ='3-105'

3、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

select cno,avg(degree) avg_grade

from score

where cno like "3%"

group by cno

having count(*)>5

4、查询最低分大于70,最高分小于90的Sno列。

-- 不去重,可能某个sno的学生的多门课程满足该条件

select sno

from score

group by degree

having min(degree) >70 and max(degree)<90

-- 去重,因为最终结果只是需要sno列,所以可以去重处理

select DISTINCT sno

from score

group by degree

having min(degree) >70 and max(degree)<90

5、查询所有学生的Sname、Cno和Degree列。

-- 方法一

select sname,cno,degree

from student s , score sc

where s.sno = sc.sno

-- 方法二

select sname,cno,degree

from  student s inner join  score sc

on s.sno = sc.sno

-- 方法三

select sname,cno,degree

from  student s  join  score sc

on s.sno = sc.sno

6、查询所有学生的Sno、Cname和Degree列。

-- 方法一

select sno,cname,degree

from score s ,course c

where s.cno =c.cno

-- 方法二

select sno,cname,degree

from score s inner join course c

on s.cno =c.cno

-- 方法三

select sno,cname,degree

from score s  join course c

on s.cno =c.cno

7、查询所有学生的Sname、Cname和Degree列。

-- 方法一

select sname,cname,degree

from student s , course c, score sc

where c.cno = sc.cno and sc.sno = s.sno

-- 方法二

select sname,cname,degree

from student s inner join course c inner join score sc

on c.cno = sc.cno and sc.sno = s.sno

-- 方法三

select sname,cname,degree

from student s  join course c  join score sc

on c.cno = sc.cno and sc.sno = s.sno

8、查询“95033”班所选课程的平均分。

-- 方法一

select class,avg(degree) avg_grade

from score sc ,student s

where sc.sno = s.sno and class ='95033'

-- 方法二

select class,avg(degree) avg_grade

from score sc inner join student s

on sc.sno = s.sno

where class ='95033'

-- 方法三

select class,avg(degree) avg_grade

from score sc  join student s

on sc.sno = s.sno

where class ='95033'

-- 方法四

select class,avg(degree) avg_grade

from score sc  join student s

on sc.sno = s.sno and class ='95033'

-- 方法五

select class,avg(degree) avg_grade

from score sc  inner join student s

on sc.sno = s.sno and class ='95033'

9、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。

select *

from score

where cno ="3-105" and degree >(select max(degree)  from score where sno ='109')

10、查询score中的同学中分数为非最高分成绩的记录。

-- 方法一

select *

from score

where degree != (select max(degree) from score )

-- 方法二

select *

from score

where degree <> (select max(degree) from score )

11、假设使用如下命令建立了一个grade表:

create table grade(low NUMERIC(10, 1),upp NUMERIC(10, 1),rank char(1));

insert into grade values(90,100,'A');

insert into grade values(80,89,'B');

insert into grade values(70,79,'C');

insert into grade values(60,69,'D');

insert into grade values(0,59,'E');

现查询所有同学的Sno、Cno和rank列。

方法一:

select sno,cno,degree,rank

from score ,grade

where degree between low and upp;

-- 方法二:

select sno,cno,degree,rank

from score inner join grade

on degree between low and upp;

-- 方法三:

select sno,cno,degree,rank

from score join grade

on degree between low and upp;

-- 方法四:

select sno,cno,degree,rank

from score join grade

on degree >= low and degree <= upp;

-- 方法五:

select sno,cno,degree,rank

from score,grade

where degree >= low and degree <= upp;

-- 方法六:

select sno,cno,degree,rank

from score inner join grade

on degree >= low and degree <= upp;

posted @ 2021-06-26 19:08  Eleanor123  阅读(459)  评论(0编辑  收藏  举报