二、表的结构以下:数学
student表(id,name,sex,class_id,address);class
score表(id,student_id,course_id,score);select
class表(id,name,grade_id);方法
grade表(id,name);统计
course表(id,name);查询
1)查询出“高一年级”下面的全部班级信息co
分析:用到的表有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;
三、表的结构以下:
图书(图书号,图书名,做者编号,出版社,出版日期);
做者(做者姓名,做者编号,年龄,性别);
要求:用SQL语句查询年龄小于平均年龄的做者姓名、图书名,出版社。
分析:所用的表有图书及做者两个表
方法:把两表联合后,找出做者表中的小于平均年龄avg(年龄)的相关信息
注意:这里的平均年龄由于是个动态的值,不能直接用年龄 <avg(年龄)进行比较,要先经过“select avg(年龄) from 做者”获得平均年龄后,才能进行比较
语句:
select s1.做者姓名,s2.图书名,s2.出版社
from 做者 s1,图书 s2
where s1.做者编号 = s2.做者编号
and 年龄 < (select avg(年龄) from 做者);