数据库查询1续

作业题:
1.查询选修课程'3-105'且成绩在6080之间的所有记录。
注释:用于指定某个范围使用between and,也可以使用and连接符;
答案:
1:select * from sc where 课程号='3-105' and 成绩 between 60 and80;
2:select * from sc where 课程号='3-105' and 成绩 > 60 and 成绩 < 80;
2.
查询成绩为858688的记录。
注释:用于制定某个集合使用 in 关键字,也可以使用 or 连接符;
答案:
1:select * from sc where 成绩=85 or 成绩=86or 成绩=88;
2:select *from sc where 成绩 in(85,86,88);
3.
查询'95031'班的学生人数。
注释:count(*)用于计算结果总数;
答案:
select count(班级) as 学生人数 from student where 班级='95031';
4.
查询最低分大于70,且最高分小于90的学号列。
注释:having后面跟聚合函数:avg,min,max,count;having语句只能跟在:group by语句后面;
答案:
select 学号,min(成绩)as 最低分,max(成绩)as 最高分 from sc groupby 学号 having min(成绩)>70 and max(成绩) < 90;
5.
查询至少有5名学生选修并以3开头的课程的平均成绩。
注释:group by 语句置于where语句后面表示根据什么条件来分组;
答案:
select avg(成绩) as 平均成绩 from sc where 课程号 like '3%' group by 课程号 having count(课程号) >= 5;
6.
查询平均分大于80分的学生的成绩表
注释:having后面跟聚合函数avg();
答案:
select * from sc groupby 学号 having avg(成绩) > 80;
7.
查询'95033'班每个学生所选课程的平均分。
注释:此题是根据 '95033'班学生的学号进行的分组,使用where语句限制group by语句的分组条件;
答案:
select 学号,avg(成绩) as 平均成绩 from sc where 学号 in (select 学号 from student where 班级 = '95033') group by 学号;
8.
以选修 '3-105'为例,查询成绩高于'109'号同学的所有同学的记录。
注释:此题使用典型的嵌套查询,层层深入;
答案:
select * from student where 学号 in (select 学号 from sc where 课程号='3-105' and 成绩 >
(
select 成绩 from scwhere 学号='109' and 课程号='3-105'));
9.
查询与学号为'108'的同学同岁的所有学生的学号、姓名和年龄。
注释:当查询的结果集返回只有一个时关键字in的作用等价于'='的作用,但是注意'='只能用与返回结果集只有一个,in 可以有多个结果;
答案:
1:select 学号,姓名,年龄 from student where 年龄 = (select 年龄 from student where 学号='108');
2:select 学号,姓名,年龄 from student where 年龄 in (select 年龄 from student where 学号='108');
10.
查询'张旭'教师任课的课程号,选修其课程学生的学号和成绩。
注释:此题使用了表的连接:inner join,将多个表连接在一起组成一个新的表,标的连接的条件是必须存在相同的列;
答案:
1:select 课程号 from course where 教师号=(select 教师号 from teacher where 姓名='张旭'); select 学号,成绩from sc where 课程号 in(select 课程号 from course where 教师号 in
(
select 教师号 from teacherwhere 姓名='张旭'));
2:select teacher.姓名 as 教师姓名,course.课程号,student.姓名 as 学生姓名,student.学号,成绩 from  teacherinner join (course inner join (sc inner join student on student.学号=sc.学号) on course.课程号=sc.课程号) oncourse.教师号=teacher.教师号 where  teacher.姓名='张旭';
11.
查询选修其课程的学生人数多于5人的教师姓名。
注册:此题采用嵌套查询和连接表两种方法,表现出了同样的效果;
答案:
1:select 姓名 as 教师姓名 from teacher where 教师号 in (select 教师号 from course where 课程号 in (select 课程号 from scgroup by 课程号 having count(*) > 5));
2:select 姓名 as 教师姓名 from teacher inner join (course inner join sc on course.课程号=sc.课程号) onteacher.教师号=course.教师号 group by sc.课程号 having count(*) > 5;
12.
查询'计算机系''电子工程系'不同职称的教师的姓名和职称。
注释:不同职称意味着分组后的返回结果集只有一个;
答案:
select 姓名 as 教师姓名,级别 as 职称 from teacher group by 级别 havingcount(*) = 1;
13.
查询选修编号为'3-105'课程且成绩至少高于选修编号为'3-245'课程的同学的课程号、学号 、成绩并按成绩从高到低次序排列。
注释:any 表示任意一个;
答案:
select * from scwhere 课程号='3-105' and 成绩 > any (select 成绩 from sc where 课程号='3-245') orderby 成绩desc;
14.
查询选修编号为'3-105'课程且成绩高于选修编号为'3-245'课程的同学的课程号、学号 、成绩。
注释:all 表示所有;

你可能感兴趣的:(sql,数据库)