实验5 复杂数据查询
实验目的
1. 掌握使用T-SQL的SELECT语句进行复杂查询的方法
2. 掌握在SELECT语句中使用集合函数的方法
3. 掌握在SELECT语句中使用GROUP BY/HAVING子句的方法
4. 掌握嵌套查询的操作方法
5. 掌握数据更新语句INSERT INTO、UPDATE、DELETE的使用方法
实验准备
还原studentdb数据库,包含各表如错误!未找到引用源。所示。
图5- 1 数据库studentdb表关系图
实验内容及步骤
1. 打开查询分析器,选择当前数据库为studentdb。
2. 在SELECT语句中使用集合函数
(1) 查询2008级的学生总数。
select count(*) as 学生总数 from 学生 where 年级=2008
(2) 分。
查询2008级学生课程代码为1304的平均总评成绩、考试成绩的最高分和最低
select avg(总评成绩) 平均成绩,max(考试成绩) 最高分,min(考试成绩) 最低分
from 成绩
where 课程代码=1304 and 年级=2008
3. 在SELECT语句中使用分组汇总(GROUP BY/HAVING子句)。
(1) 查询2008年入校的男学生和女学生的个数。
select 性别,count(*) 学生数
from 学生
where 进校时间='2008-09-01'
group by 性别
(2) 查询2008级课程代码为1304的不同专业的平均总评成绩。
select 专业,avg(总评成绩) as 平均成绩
from 成绩
where 年级=2008 and 课程代码=1304
group by 专业
(3) 成绩。
查询2008级课程代码为1304且平均总评成绩在95分以上的专业代码及平均
select 专业,avg(总评成绩) as 平均成绩
from 成绩
where 年级=2008 and 课程代码=1304
group by 专业
having avg(总评成绩)>=90
4. 使用嵌套查询
(1) 查询“计算机文化基础”的考试成绩。
select 学号,专业,年级,班序号,总评成绩
from 成绩
where 课程代码=(select 课程代码
from 课程
where 课程名称='计算机文化基础')
(2) 用IN子查询查找2008级课程1304总评成绩为100分的学生学号、姓名、性
别、专业。
select 学号,姓名,性别,专业
from 学生
where 学号 in(select 学号 from 成绩
where 年级=2008 and 课程代码=1304 and 总评成绩=100)
(3) 查询学号为30的学生的分数比31号学生的最低分数高的课程代码和分数。
select 课程代码,总评成绩
from 成绩
where 学号= '30 '
and 总评成绩 >any(select 总评成绩
from 成绩
where 学号= '31 ')
(4) 查询学号为30的学生的分数比31号学生的最高分数还要高的课程代码和分
数。
select 课程代码,总评成绩
from 成绩
where 学号= '30 '
and 总评成绩 >all(select 总评成绩
from 成绩
where 学号= '31 ')
5. 数据更新。
(1) 在studentdb数据库中创建新表stinfo,表结构如错误!未找到引用源。。
图5- 2 stinfo表结构
(2) 使用INSERT INTO语句通过学生表将2008级学生的学号、姓名、性别数据追
加到新表stinfo中。
insert into stinfo(学号,姓名,性别)
select 学号,姓名,性别 from 学生 where 年级=2008
插入完成后查询新表stinfo数据:select * from stinfo
(3) 使用UPDATE语句通过成绩表更新stinfo总成绩。
update stinfo
set 总成绩=(select sum(总评成绩)
from 成绩
where stinfo.学号=成绩.学号)
查询表stinfo数据:select * from stinfo
(4) 使用DELETE语句删除表stinfo男同学的学生记录。
delete from stinfo where 性别='男'
查询表stinfo数据:select * from stinfo
实验思考
1. 查询2008级课程代码为1304且平均总评成绩在90分以上的专业代码、专业名称及平均成绩。
2. HAVING子句与WHERE子句的区别是什么
3. 用内连接查询(INNER JOIN)实现4(2)要求的查询结果。
因篇幅问题不能全部显示,请点此查看更多更全内容