数据库数据查询实验报告和答案.docx
《数据库数据查询实验报告和答案.docx》由会员分享,可在线阅读,更多相关《数据库数据查询实验报告和答案.docx(21页珍藏版)》请在冰豆网上搜索。
数据库数据查询实验报告和答案
韶关学院
学生实验报告册
实验课程名称:
数据库技术与应用
实验项目名称:
数据库的数据查询
实验类型(打√):
(基础☑、综合、设计)
院系:
专业班级:
姓名学号:
指导老师:
韶关学院教务处编制
一、实验预习报告内容
预习日期:
2013年10月20日
实验预习报告内容原则上应包含实验目的、实验所用主要仪器药品、实验原理与公式、
实验预习疑问等项目。
一、实验目的
1、掌握使用Transact-SQL的SELECT语句进行基本查询的方法。
2、掌握使用SELECT语句进行条件查询的方法。
3、掌握SELECT语句的GROUPBY、ORDERBY以及UNION子句的作用和使用方法。
4、掌握嵌套查询的方法。
5、掌握连接查询的操作方法。
二、实验准备
1、了解SELECT语句的基本语法格式和执行方法。
2、了解嵌套查询的表示方法。
3、了解UNION运算符的用法。
4、了解SELECT语句的GROUPBY、ORDERBY以及UNION子句的作用和使用方法。
5、了解IN、JOIN等子查询的格式。
6、了解INSERT、INTO、UPDATE、DELETE的格式与作用。
三、实验内容
1、完成上机实验指导中的实验4,并回答实验中的实验思考。
(具体实验要求看上机实验指导书的9~11页,把实验步骤和Transact-SQL语句相关的内容和结果截图,填在“三、实验报告内容”中。
并写一下实验小结。
)
实验预习评分:
二、实验原始(数据)记录
实验时间:
2013年10月22日(星期二第七八节)
实验同组人:
如有实验数据表格,学生在实验预习时应画好实验数据表格,供实验时填写数据(本页如
不够,可另附相同规格的纸张)。
指导教师
批阅及签名
签名:
年月日
三、实验报告内容
2013年9月24日
实验报告内容原则上应包含主要实验步骤、实验数据计算(实验操作)结果、实验结果
(疑问)分析等项目。
实施内容:
一、根据实验要求完成实验:
(写明步骤和截图)
1、在数据库studentsdb中,新建表studentdb_info,curriculum,grade。
并输入相应的数据,如图1、2和3所示。
图1
图2
图3
2、在studentsdb数据库中,使用下列SQL语句将输出什么?
(1)selectcount(*)fromgrade
结果如图4所示:
图4
(2)selectsubstring(学生姓名,1,2)fromstudent_info
结果如图5所示:
图5
(3)selectupper('kelly')
结果如图6所示:
图6
(4)selectreplicate('kelly',3)
结果如图7所示:
图7
(5)selectsqrt(分数)fromgrade
where分数>=85
结果如图8所示:
图8
(6)select2,3,power(2,3)
结果如图9所示:
图9
(7)selectyear(getdate()),month(getdate()),day(getdate())
结果如图10所示:
图10
2、在studentsdb数据库中使用select语句近基本查询。
(1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。
执行如下语句:
select学号,学生姓名,出生日期fromstudent_info
结果如图11所示
图11
(2)查询学号为0002的学生的姓名和家庭住址
执行如下语句:
select学生姓名,家庭地址fromstudent_info
where学号=0002
结果如图12所示
图12
(3)找出所有男同学的学号和姓名。
执行如下语句:
select学号,学生姓名fromstudent_info
where性别='男'
结果如图13所示
图13
3、使用select语句进行条件查询。
(1)在grade表中查找分数在80~90范围内的学生的学号和分数。
执行如下语句:
select学号,分数fromgrade
where分数between80and90
结果如图14所示
图14
(2)在grade表中查询课程编号为0003的学生的平均分。
执行如下语句:
selectavg(分数)as平均成绩fromgrade
where课程编号=0003
结果如图15所示
图15
(3)在grade表中查询学习各门课程的人数。
执行如下语句:
select课程编号,count(课程编号)as课程人数
fromgradegroupby课程编号
结果如图15所示
图15
(4)将学生按出生日期由大到小排序。
执行如下语句:
select*fromstudent_infoorderby出生日期desc
结果如图16所示
图16
(5)查询所有姓“张”的学生的学号和姓名。
执行如下语句:
select*fromstudent_infowhere学生姓名like'张%'
结果如图17所示
图17
4、嵌套查询
(1)在student_info表中查找与“刘卫民”性别相同的所有学生的姓名、出生日期。
执行如下语句:
select学生姓名,出生日期fromstudent_info
where性别=(select性别fromstudent_info
where学生姓名='刘卫平')
结果如图18所示
图18
(2)使用in子查询查找所修课程编号为0002、0005的学生学号、姓名、性别。
执行如下语句:
select学号,学生姓名,性别fromstudent_info
wherestudent_info.学号in
(select学号fromgradewhere课程编号in('0002','0005'))
结果如图19所示
图19
(3)列出学号为0001的学生的分数比0002号学生的最低分数高的课程编号和分数。
执行如下语句:
select课程编号,分数fromgrade
where学号='0001'and分数>any
(select分数fromgradewhere学号='0002')
结果如图20所示。
图20
(4)列出学号为0001的学生的分数比学号为0002的学生的最高成就还要高的课程编号和分数。
执行如下语句:
select课程编号,分数fromgrade
where学号='0001'and分数>all
(select分数fromgradewhere学号='0002')
结果如图21所示。
图21
5、多表查询
(1)查询分数在80~90范围内的学生的学号、姓名、分数。
执行如下语句:
selectstudent_info.学号,学生姓名,分数fromstudent_info,grade
wherestudent_info.学号=grade.学号and分数between80and90
结果如图22所示
图22
(2)、查询学习“C语言程序设计”课程的学生的学号、姓名和分数。
执行如下语句:
selectstudent_info.学号,学生姓名,分数
fromstudent_info
innerjoingradeonstudent_info.学号=grade.学号
innerjoincurriculumongrade.课程编号=curriculum.课程编号
and课程名称='C语言程序设计'
结果如图23所示。
图23
(3)查询所有男同学的选课情况,要求列出学号、姓名、课程名称、分数。
执行如下语句:
selectstudent_info.学号,学生姓名,课程名称,分数
fromstudent_infoleftouterjoingradeonstudent_info.学号=grade.学号
leftouterjoincurriculumoncurriculum.课程编号=grade.课程编号
where性别='男'
结果如图24所示
图24
(4)在查询每个学生的所选课程的最高成绩,要求列出学号、姓名、课程编号、分数。
执行如下语句。
selectstudent_info.学号,学生姓名,curriculum.课程编号,分数
fromstudent_info
innerjoingradeonstudent_info.学号=grade.学号
innerjoincurriculumongrade.课程编号=curriculum.课程编号
where分数=(selectmax(grade.分数)fromgrade
wherestudent_info.学号=grade.学号)
结果如图25所示
图25
(5)查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有没有选修课程的学生的总成绩为空。
执行如下语句:
selectstudent_info.学号,学生姓名,总成绩fromstudent_info
leftouterjoin(select学号,sum(分数)as总成绩fromgradegroupby学号)gradeonstudent_info.学号=grade.学号
结果如图26所示
图26
(6)为grade表添加数据行:
学号0004、课程编号为0006、分数为76。
查询所有课程的选课情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。
执行如下语句:
insertgrade
values('0004','0006','76',null)
selectgrade.课程编号,课程名称,grade.选修人数fromcurriculumrightouterjoin
(select课程编号,count(课程编号)as选修人数fromgradegroupby课程编号)
gradeongrade.课程编号=curriculum.课程编号
结果如图27所示
图27
6、使用union运算符将student_info表中姓“张”的学生的学号、姓名与curriculum表的课程编号、课程名称返回在一个表中,且列名为u_编号、u_名称。
执行如下语句:
select学号asu_编号,学生姓名asu_名称fromstudent_info
where学生姓名like'张%'
union
select课程编号asu_编号,课程名称asu_名称fromcurriculum
结果如图28所示
图28
7、数据更新
(1)创建totalgrade表,具有数据列:
学号、姓名、总成绩。
执行如下语句:
createtabletotalgrade
(学号char(4)notnull,
学生姓名varchar(8)null,
总成绩decimal(5,2)null)
结果如图29所示
图29
(2)使用insertinto语句通过student_info表更新totalgrade表的学号、姓名列数据。
执行如下语句:
insertintototalgrade
select学号,学生姓名,总成绩=0fromstudent_info
结果如图30所示:
图30
(3)使用update语句通过grade表更新totalgrade表的总成绩列数据,使totalgrade表中每一个学生的总成绩为grade表中该学生各成绩之和。
执行如下语句:
updatetotalgradeset总成绩=
(selectsum(分数)fromgradewheretotalgrade.学号=grade.学号)fromgrade
结果如图31所示:
图31
效果如图32所示
图32
(4)删除totalgrade表中没有总成绩的学生记录。
执行如下语句:
deletefromtotalgradewhere总成绩isnull
结果如图33所示,效果如图34所示。
图33图34
实验思考
1、查询所有没有选修课程的学生信息,返回结果包括学号、姓名、性别。
执行如下语句:
select学号,学生姓名,性别fromstudent_info
where学号notin(select学号fromgrade)
结果如图35所示
图35
2、在student_info表和grade表之间实现交叉连接。
执行如下语句:
selecta.学号,a.学生姓名,a.性别,a.出生日期,a.家庭地址,b.课程编号,b.分数fromstudent_infoacrossjoingradeb
结果如图36所示
图36
3、查询每个学生的所选课程的成绩,并列出学号生成分组汇总行(总成绩)和明细行(各科成绩)
执行如下语句:
select学号,分数fromgrade
orderby学号
computesum(分数)by学号
结果如图37所示
图37
实验小结:
实验报告评分:
注:
1、如个别实验的实验报告内容多,实验报告册页面不够写,或有识图、画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。
2、实验报告册属教学运行材料,院系(中心)应按有关规定归档保管。