数据库练习题(2--简单查询题)

时间:2023-02-23 11:40:18

2、表的结构如下:

student表(id,name,sex,class_id,address);

score表(id,student_id,course_id,score);

class表(id,name,grade_id);

grade表(id,name);

course表(id,name);

1)查询出“高一年级”下面的所有班级信息

分析:用到的表有grade,class

方法:把grade与class通过年级号联合后,选出高一年级的班级信息即可

语句:

select s1.* from class s1,grade s2 where s1.grade_id = s2.id and s2.name= '高一年级';

2)查询出“高一年级”下面的所有班级里面的学生信息

分析:用到的表有grade,class,student

方法:把这三个表联合后,选出高一年级的学生信息即可

语句:

select s1.* from student s1,class s2,grade s3 where s1.id = s2.student_id and s2.grade_id = s3.id and s3.name = '高一年级';

3)查询出“高一年级”下面的所有班级里面的男学生信息

分析:所用到的表有student,class,grade

方法:把这三个表进行联合,然后找出高一年级及性别为男的学生信息即可,即在上面的语句中再加入一个条件s1.sex = '男'

语句:

4)查询出小于等于90分的学生姓名、性别、科目名称、分数

分析:所用到的表有student--(姓名,性别),score--分数,course--科目名称

方法:把三个表进行联合后,找出小于等于90分的学生的相关信息即可,score.score<=90

语句:

5)查询高二年级下所有数学成绩小于90分的同学的学号和姓名以及分数

分析:所用到的表有student--学号和姓名,score--分数,grade--高二年级,course--数学,class--通过此表与grade表进行联合

方法:把5个表进行联合后,从grade表中找出高二年级(grade.name='高二年级'),从course中找出数学课程(course.name='数学'),从score表中找出分数小于90(score.score<90),然后显示出该同学的学号,姓名及分数即可

语句:略

6)查询成绩表没有成绩的学生学号,姓名

分析:所用的表有student,score

方法:首先找出有成绩的学生的学号,然后跟学生表中的学号进行比对,找出不再学生表中的学号即可

语句:

select id,name from student where id not in(select student_id from score);

7)按年级分组统计每个年级下有多少班级

分析:所用的表有class--统计班级数,grade--获取年级名称

方法:两表联合后,通过对class表中的grade_id进行分组,然后统计出每个年级的班级数就可以了

语句:

select s2.name,count(*) as '班级个数' from class s1,grade s2 where s1.grade_id = s2.id group by s2.id;

8)按年级分组统计每个年级下有多少学生

分析:所用的表有student--统计学生数,class--通过此表按年级分组,grade--找出年级的名称

方法:把三表联合后,按年级分组(group by grade),统计出学生的数目即可(count(*))。

语句:

select s3.name,count(*) from student s1,class s2,grade s3 where s1.class_id = s2.id and s2.grade_id = s3.id group by s3.id;

3、表的结构如下:

图书(图书号,图书名,作者编号,出版社,出版日期);

作者(作者姓名,作者编号,年龄,性别);

要求:用SQL语句查询年龄小于平均年龄的作者姓名、图书名,出版社。

分析:所用的表有图书及作者两个表

方法:把两表联合后,找出作者表中的小于平均年龄avg(年龄)的相关信息

注意:这里的平均年龄因为是个动态的值,不能直接用年龄 <avg(年龄)进行比较,要先通过“select avg(年龄) from 作者”得到平均年龄后,才能进行比较

语句:

select s1.作者姓名,s2.图书名,s2.出版社

from 作者 s1,图书 s2

where s1.作者编号 = s2.作者编号

and 年龄 < (select avg(年龄) from 作者);