当前位置:文档之家› 数据库数据查询实验报告和答案.doc

数据库数据查询实验报告和答案.doc

数据库数据查询实验报告和答案韶关学院学生实验报告册实验课程名称:数据库技术与应用实验项目名称:数据库的数据查询实验类型(打√):(基础☑、综合、设计)院系:专业班级:姓名学号:指导老师:韶关学院教务处编制一、实验预习报告内容预习日期:10月10月22日(星期二第七八节)实验同组人:如有实验数据表格,学生在实验预习时应画好实验数据表格,供实验时填写数据(本页如不够,可另附相同规格的纸张)。

指导教师批阅及签名签名:年月日三、实验报告内容9月24日实验报告内容原则上应包含主要实验步骤、实验数据计算(实验操作)结果、实验结果(疑问)分析等项目。

实施内容:一、根据实验要求完成实验:(写明步骤和截图)1、在数据库studentsdb中,新建表studentdb_info,curriculum,grade。

并输入相应的数据,如图1、2和3所示。

图1图2图32、在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(分数)fromgradewhere分数>=85结果如图8所示:图8(6)select2,3,power(2,3)结果如图9所示:图9(7)selectyear(getdate()),month(getdate()),day(getdate())结果如图10所示:图102、在studentsdb数据库中使用select语句近基本查询。

(1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。

执行如下语句:select学号,学生姓名,出生日期fromstudent_info结果如图11所示图11(2)查询学号为0002的学生的姓名和家庭住址执行如下语句:select学生姓名,家庭地址fromstudent_infowhere学号=0002结果如图12所示图12(3)找出所有男同学的学号和姓名。

执行如下语句:select学号,学生姓名fromstudent_infowhere性别=男结果如图13所示图133、使用select语句进行条件查询。

(1)在grade表中查找分数在80~90范围内的学生的学号和分数。

执行如下语句:select学号,分数fromgradewhere分数between80and90结果如图14所示图14(2)在grade表中查询课程编号为0003的学生的平均分。

执行如下语句:selectavg(分数)as平均成绩fromgradewhere课程编号=0003结果如图15所示图15(3)在grade表中查询学习各门课程的人数。

执行如下语句:select课程编号,count(课程编号)as课程人数fromgradegroupby课程编号结果如图15所示图15(4)将学生按出生日期由大到小排序。

执行如下语句:select*fromstudent_infoorderby出生日期desc结果如图16所示图16(5)查询所有姓“张”的学生的学号和姓名。

执行如下语句:select*fromstudent_infowhere学生姓名like张%结果如图17所示图174、嵌套查询(1)在student_info表中查找与“刘卫民”性别相同的所有学生的姓名、出生日期。

执行如下语句:select学生姓名,出生日期fromstudent_infowhere 性别=(select性别fromstudent_infowhere学生姓名=刘卫平)结果如图18所示图18(2)使用in子查询查找所修课程编号为0002、0005的学生学号、姓名、性别。

执行如下语句:select学号,学生姓名,性别fromstudent_infowherestudent_info.学号in(select学号fromgradewhere 课程编号in(0002,0005))结果如图19所示图19(3)列出学号为0001的学生的分数比0002号学生的最低分数高的课程编号和分数。

执行如下语句:select课程编号,分数fromgradewhere学号=0001and 分数>any(select分数fromgradewhere学号=0002)结果如图20所示。

图20(4)列出学号为0001的学生的分数比学号为0002的学生的最高成就还要高的课程编号和分数。

执行如下语句:select课程编号,分数fromgradewhere学号=0001and 分数>all(select分数fromgradewhere学号=0002)结果如图21所示。

图215、多表查询(1)查询分数在80~90范围内的学生的学号、姓名、分数。

执行如下语句:selectstudent_info.学号,学生姓名,分数fromstudent_info,gradewherestudent_info.学号=grade.学号and分数between80and90结果如图22所示图22(2)、查询学习“C语言程序设计”课程的学生的学号、姓名和分数。

执行如下语句:selectstudent_info.学号,学生姓名,分数fromstudent_infoinnerjoingradeonstudent_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_infoinnerjoingradeonstudent_info.学号=grade.学号innerjoincurriculumongrade.课程编号=curriculum.课程编号where分数=(selectmax(grade.分数)fromgradewherestudent_info.学号=grade.学号)结果如图25所示图25(5)查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有没有选修课程的学生的总成绩为空。

执行如下语句:selectstudent_info.学号,学生姓名,总成绩fromstudent_infoleftouterjoin(select学号,sum(分数)as总成绩fromgradegroupby学号)gradeonstudent_info.学号=grade.学号结果如图26所示图26(6)为grade表添加数据行:学号0004、课程编号为0006、分数为76。

查询所有课程的选课情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。

执行如下语句:insertgradevalues(0004,0006,76,null)selectgrade.课程编号,课程名称,grade.选修人数fromcurriculumrightouterjoin(select课程编号,count(课程编号)as选修人数fromgradegroupby课程编号)gradeongrade.课程编号=curriculum.课程编号结果如图27所示图276、使用union运算符将student_info表中姓“张”的学生的学号、姓名与curriculum表的课程编号、课程名称返回在一个表中,且列名为u_编号、u_名称。

执行如下语句:select学号asu_编号,学生姓名asu_名称fromstudent_infowhere学生姓名like张%unionselect课程编号asu_编号,课程名称asu_名称fromcurriculum结果如图28所示图287、数据更新(1)创建totalgrade表,具有数据列:学号、姓名、总成绩。

执行如下语句:createtabletotalgrade(学号char(4)notnull,学生姓名varchar(8)null,总成绩decimal(5,2)null)结果如图29所示图29(2)使用insertinto语句通过student_info表更新totalgrade表的学号、姓名列数据。

执行如下语句:insertintototalgradeselect学号,学生姓名,总成绩=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_infowhere 学号notin(select学号fromgrade)结果如图35所示图352、在student_info表和grade表之间实现交叉连接。

执行如下语句:selecta.学号,a.学生姓名,a.性别,a.出生日期,a.家庭地址,b.课程编号,b.分数fromstudent_infoacrossjoingradeb结果如图36所示图363、查询每个学生的所选课程的成绩,并列出学号生成分组汇总行(总成绩)和明细行(各科成绩)执行如下语句:select学号,分数fromgradeorderby学号computesum(分数)by学号结果如图37所示图37实验小结:实验报告评分:注:1、如个别实验的实验报告内容多,实验报告册页面不够写,或有识图、画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。

相关主题