合肥师范学院实验报告册2013/2014学年第2学期系别计算机科学与技术系实验课程数据库原理专业计算机软件班级1班姓名祝求智学号1210431009指导教师潘洁珠实验名称课时实验报告成绩实验(一)——数据库基本操作2实验(二)——SQL语句6实验(三)——数据库完整性与安全性实验4实验(四)——数据库编程4备注:实验一——数据库基本操作一、实验目的1.熟悉MSSQLSERVER运行界面,掌握服务器的基本操作。2.掌握界面操作方法完成用户数据库建立、备份和还原。3.建立两个实验用的数据库,使用企业管理器和查询分析器对数据库和表进行基本操作。二、实验预习内容在认真阅读教材及实验指导书的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。1.熟悉SQLSERVER2000的运行环境,练习服务器基本操作:打开、停止、关闭。2.使用SQLSERVER2000中的企业管理器完成以下任务。数据库名称:STC表:STU(snochar(9),snamevarchar(50),ssexchar(2),sageint,sdeptchar(2));COUTSES(cnochar(3),cnamevarchar(50),cpnochar(3),creditint);SC(snochar(9),cnochar(3),gradeint);说明:以上为表结构,以snochar(9)为例,说明sno属性设置为字符类型,宽度为9,int指整型数据。1)建立数据库STC,分别建立以上三张表,并完成数据录入。(表结构及数据参见教材)数据库STC表STU表COUTSES表SC2)分析并建立各表的主码,用下划线在上面表结构中标出主码。表STU的主码为Sno表COUTSESDE主码为Cno表SC的主码为sno、cno3)建立各表之间的关联,请简述操作步骤。4)参考实验指导书的【第5章数据库的备份和还原】,使用企业管理器对数据库STC进行备份,并尝试在个人电脑与机房电脑上进行还原,请简述备份、还原操作的步骤。3.在SQLSERVER2000的查询分析器中使用SQL语言完成以下任务。参考实验指导书《数据库系统实验指导教程》【实验1.1数据定义】,建立数据库SCHOOL,分别建立students、teachers、courses、choices四张表,表结构见实验指导书P236【附录A】。1)用SQL语言创建数据库、建表。建表时为各表建立关键字、设置外码,数据暂不录入,请写出对应的SQL命令。createdatabaseSCHOOLCREATEtablestudents(sidchar(10)primarykey,snamechar(30)notnull,emailchar(30),gradeint)createtableteachers(tidchar(10)primarykey,tnamechar(30)notnull,emailchar(30),salaryint)createtablecourses(cidchar(10)primarykey,cnamechar(30)notnull,hourint)createtablechoices(nointprimarykey,sidchar(10)notnullreferencesstudents(sid),tidchar(10)referencesteachers(tid),cidchar(10)notnullreferencescourses(cid),socreint)2)为students表、courses建立按主键増序排列的索引,请写出相应的SQL命令。createindexStuonstudents(sidASC)createindexCouoncourses(cidASC)3)删除course上的索引,请写出相应的SQL命令。dropindexcourses.Cou4)在SCHOOL数据库中的students表中增加一个“出生日期”字段,类型为日期时间型,请写出对应的SQL命令。altertablestudentsadd出生日期datetime5)删除students中的“出生日期”字段,请写出对应的SQL命令。altertablestudentsdropcolumn出生日期6)删除SCHOOL数据库中的students表,请写出对应的SQL命令。sp_helpaltertablechoicesdropFK__choices__sid__7D78A4E7droptablestudents4.使用企业管理器创建数据库SCHOOL,实现内容与实验预习内容3完全相同。建立数据库SCHOOL表students表teschers表courses表choices1.设置主码2.建立索引3.删除索引4.增加出生日期字段删除字段5删除students5.使用企业管理器,将SCHOOL数据库分离出MSSQLSERVER,请简述步骤。6.使用企业管理器,使用【数据库/所有任务/附加数据库】将SCHOOL数据库添加进SQLSERVER,并查看数据。7.使用查询分析器,删除数据库STC,请写出对应的SQL命令。dropdatabaseSTC8.结束本次实验三、实验课后训练1.使用企业管理器练习数据的导入导出。1)将SCHOOL数据库students表中的数据导出到STC数据库对应的stu表中;2)向STC数据库courses表导入SCHOOL数据库courses表中的数据;3)自行练习实验指导书【实验5.3SQLSERVER数据库的导入与导出】部分;2.自行练习实验指导书【实验1.1数据定义】部分。实验报告1.简述本次实验所用到的SQL命令及其功能。定义基本表,建表Createtable表名(列名数据类型[列级完整性约束条件][,列名数据类型[列级完整性约束条件][,表级完整性约束条件)修改基本表,增加新列,删除某一列Altertable表名[add新列名数据类型[完整性约束]][drop完整性约束名][altercolumn列名数据类型]删除基本表Droptable表名[restrict|cascade]查看当前表的索引、约束Sp_help建立索引和删除索引Create[unique][cluster]index索引名On表名(列名[次序][,列名[次序]]…)2.在MSSQLSERVER中数据库的“分离|添加”与“备份|还原”是相同的功能吗?不是。分离|添加是要求当前数据库不在运行,分离后可以在任一台装有SQLSERVER的电脑上添加,且添加完成后与你分离时的状态完全一样。而备份|还原功能在数据库运行时也可以进行备份还原的,经常是为了数据库出现错误后能够还原到之前备份的状态3.实验总结(实验过程中出现的问题、解决方法、结果如何或其它)由于这是第一次实验,也是第一次使用SQLSERVER,所以在做实验时遇见了很多小问题,但是在经过看实验指导书和老师在上课时讲解过的操作最终完成了实验。在删除students表时,按照书上的SQL语句运行但是系统提示说不能删除,因为有个外键约束所以拒绝删除,最后在Sp_help语句查询students表的外键约束名,删除它再按照书上的语句最后终于删除了students表sp_helpaltertablechoicesdropFK__choices__sid__7D78A4E7droptablestudents实验二——SQL语句一、实验目的1.熟悉SQL的数据查询语言,能使用SQL进行单表查询、连接查询、嵌套查询、集合查询和统计查询,能理解空值的处理;2.熟悉数据库的数据更新操作,能使用SQL语句对数据库进行数据的插入、更新、删除操作;3.熟悉SQL支持的有关视图的操作,能创建、查询及取消视图;4.了解NULL在数据库中的特殊含义,掌握使用SQL进行与空值相关的操作;二、实验预习内容在认真阅读教材及实验指导书【实验1.2数据查询】、【实验1.3数据更新】、【实验1.4视图】和【实验1.6空值和空集的处理】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。1.使用SCHOOL数据库,在SQLSERVER2000的查询分析器中使用SQL语言完成以下操作。请在空白处填写相应的SQL命令。1)查询年级为2001的所有学生的名称,按编号顺序排列;selectsnamefromstudentswheregrade='2001'orderbysidasc2)查询所有课程名称中含有data的课程编号;selectcidfromcourseswherecnamelike'%data%'3)统计所有老师的平均工资;selectavg(salary)fromteachers4)查询至少选了3门课的学生编号;selectsidfromchoicesgroupbysidhavingcount(*)35)查询学号为80009026的学生的姓名、所选课名及成绩;selectsname,cname,scorefromstudents,courses,choiceswherestudents.sid='800009026'andstudents.sid=choices.sidandcourses.cid=choices.cid6)查询没有学生选的课程编号;selectcidfromcourseswherenotexists(selectcidfromchoices)7)查询既选了C++又选了Java课程的学生编号;selectsidfromchoiceswherecidin(selectcidfromcourseswherecname='C++')andsidin(selectsidfromchoiceswherecidin(selectcidfromcourseswherecname='Java'))8)查询选了C++但没选Java课程的学生编号;selectsidfromchoiceswherecidin(selectcidfromcourseswherecname='C++')andsidnotin(selectsidfromchoiceswherecidin(selectcidfromcourseswherecname='Java'))9)向STUDENTS表中插入“LiMing”的个人信息(编号:700045678,名字:LiMing,Email:LX@cdemg.com,年级:1992);insertintostudents(sid,sname,email,grade)values('700045678','LiMing','LX@cdemg.com','1992')10)将“LiMing”的年级改为2002;updatestudentssetgrade=2002wheresname='LiMing'11)删除所有选了Java课程的学生选课记录;deletefromchoiceswherecidin(selectcidfromcourseswherecname='Java')12)求出每门课的课程号、选课人数,结果存入数据库表T1中。createtableT1(cidchar(10),mint)insertintoT1(cid,m)selectcourses.cid,count(sid)fromcoursesleftjoinchoicesoncourses.cid=choices.cidgroupbycourses.cidselectdistinct*fromT1orderbycidasc13)查询所有选课记录的成绩并换算为五分制(注意NULL的情况);createtableA(sscorechar(10))insertintoA(sscore)selectscorefromchoicesupdateAsetsscore=sscore/20selectscore,sscorefromchoices,Aselec