发布时间 : 星期六 文章数据库第9章查询练习题目(有答案)更新完毕开始阅读d67a9d1386c24028915f804d2b160b4e777f8178
第九章习题 9.1分组查询练习
a). 基于“生源情况”表,统计不同姓的人数,列出:姓、人数,结果按人数降序排序。(先统计所有学生的人数)
SELECT left(姓名,1) as 姓,count(*) as 人数 FROM 生源情况 group by left(姓名,1)
ORDER BY count(*) DESC
b). 基于“生源情况”表,按地区分类统计入学成绩的平均值、最大值、最小值,并按平均值降序排列。先统计所有入学成绩的的平均值、最大值、最小值)
SELECT 地区,avg(入学成绩) as 平均值,max(入学成绩) as 最大值,min(入学成绩) as 最小值 FROM 生源情况 group by 地区
ORDER BY avg(入学成绩) DESC
c). 基于“生源情况”表,找出年龄平均值最高的班级。(提示:先按班级名称统计每个班级的平均年龄,再找年龄的最大值)
SELECT TOP 1 班级名称, AVG(year(date())-year(出生日期)) as 平均年龄 FROM 生源情况
GROUP BY 班级名称
ORDER BY AVG(year(date())-year(出生日期)) DESC
d). 基于“生源情况”表,列出学生人数少于100的地区。
select 地区, count(*) as 学生人数 from 生源情况 group by 地区
having count(*)<100
9.2联接查询练习
a). 列举学号为“200894006”的同学所参加的考试的场次、教室和课程名称。
select 场次,教室,课程名称
from 学生考试 inner join 课程 on 学生考试.课程编号=课程.课程编号
where 学号=\或
select 场次,教室,课程名称 from 学生考试,课程
where 学号=\学生考试.课程编号=课程.课程编号
b). 列举学号为“200894006”的同学所参加的每场考试的监考教师的姓名。
select 姓名
from (学生考试 inner join 教师监考 on 学生考试.场次=教师监考.场次 and 学生考试.课程编号=教师监考.课程编号 and 学生考试.教室=教师监考.教室)inner join 教师 on 教师监考.教师编号=教师.教师编号 where 学号=\或
select 姓名
from 学生考试,教师监考,教师
where 学号=\学生考试.场次=教师监考.场次
and 学生考试.课程编号=教师监考.课程编号 and 学生考试.教室=教师监考.教室 and 教师监考.教师编号=教师.教师编号
c). 列举来自“浙江”的学生的所在学院名称、班级名称、学号和姓名。
SELECT 学院名称, 班级名称, 学号, 姓名
FROM (学院 INNER JOIN 班级 ON 学院.学院编号 = 班级.学院编号) INNER JOIN 学生 ON 班级.班级编号 = 学生.班级编号 WHERE 地区=\浙江\或
SELECT 学院名称, 班级名称, 学号, 姓名 FROM 学院,班级,学生
WHERE 地区=\浙江\and 学院.学院编号 = 班级.学院编号 and 班级.班级编号 = 学生.班级编号
d). 查询“梁子平”同学所在班级的学生人数。
SELECT 班级人数
FROM 班级 INNER JOIN 学生 ON 班级.班级编号 = 学生.班级编号 WHERE 姓名=\梁子平\或
SELECT 班级人数 FROM 班级,学生
WHERE 姓名=\梁子平\班级.班级编号 = 学生.班级编号 或
select count(*)
from 学生
where 班级编号 in (SELECT 班级编号 from 学生 WHERE 姓名=\梁子平\或
select 班级人数 from 班级
where 班级编号 in (SELECT 班级编号 from 学生 WHERE 姓名=\梁子平\
9.3 子查询
a). 找出与学号“200894006”的学生同学院且同年出生的学生。
先作这个查询,学院编号为”01”和1991出生的学生信息 select 学生.*
from 学生 inner join 班级 on 学生.班级编号=班级.班级编号 where 学院编号=\出生日期)=1991
第一步:先找到该同学所在学院的编号 select 学院编号 from 班级
where 班级编号 in (select 班级编号 from 学生 where 学号=\第二步:找到年份
SELECT year(出生日期) from 学生 where 学号=\第三步:多表连接 select 学生.*
from 学生 inner join 班级 on 学生.班级编号=班级.班级编号 where 学院编号 in (select 学院编号 from 班级
where 班级编号 in( select 班级编号 from 学生
where 学号=\) and year(出生日期) in ( select year(出生日期) from 学生
where 学号=\或
select 学生.* from 班级,学生
where 学生.班级编号=班级.班级编号 and 学院编号 in ( select 学院编号 from 班级
where 班级编号 in (select 班级编号 from 学生 where 学号=\
and year(出生日期) in (SELECT year(出生日期) from 学生 where 学号=\
b). 例举班级数少于20的那些学院的名称和班级数。
SELECT 学院名称,(select count(*) from 班级 where 学院.学院编号=班级.学院编号 ) as 班
级数
from 学院
where (select count(*) from 班级 where 学院.学院编号=班级.学院编号 )<20
c). 例举教师“罗亮”所监考的学生来自哪些班级。
第一步:“罗亮”监考的场次 select 场次
from 教师监考 where 教师编号 in ( select 教师编号
from 教师 where 姓名=\罗亮\第二步:“罗亮”监考的课程编号 select 课程编号
from 教师监考 where 教师编号 in ( select 教师编号
from 教师 where 姓名=\罗亮\第三步:“罗亮”监考的教室 select 教室
from 教师监考 where 教师编号 in ( select 教师编号
from 教师 where 姓名=\罗亮\
第四步:满足以上三个条件考试的学生的学号 select 学号 from 学生考试 where
场次 in (select 场次
from 教师监考 where 教师编号 in ( select 教师编号
from 教师 where 姓名=\罗亮\) and
课程编号 in (select 课程编号
from 教师监考 where 教师编号 in ( select 教师编号
from 教师 where 姓名=\罗亮\) and
教室 in (select 教室
from 教师监考 where 教师编号 in ( select 教师编号
from 教师 where 姓名=\罗亮\)
第五步:多表连接 select distinct 班级名称 from 班级,学生