数据库第9章查询练习题目(有答案) 联系客服

发布时间 : 星期六 文章数据库第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 班级,学生