合肥师范学院实验报告册2013 / 2014 学年第2 学期系别计算机科学与技术系实验课程数据库原理专业计算机软件班级软件一班姓名周锦学号1210431081指导教师潘洁珠实验一——数据库基本操作一、实验目的1.熟悉MS SQL SERVER运行界面,掌握服务器的基本操作。
2.掌握界面操作方法完成用户数据库建立、备份和还原。
3.建立两个实验用的数据库,使用企业管理器和查询分析器对数据库和表进行基本操作。
二、实验预习内容在认真阅读教材及实验指导书的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。
1.熟悉SQL SERVER 2000 的运行环境,练习服务器基本操作:打开、停止、关闭。
2.使用SQL SERVER 2000 中的企业管理器完成以下任务。
数据库名称:STC表:STU(sno char(9), sname varchar(50), ssex char(2) , sage int, sdept char(2) );COUTSES(cno char(3), cname varchar(50), cpno char(3), credit int );SC(sno char(9), cno char(3), grade int );说明:以上为表结构,以sno char(9)为例,说明sno属性设置为字符类型,宽度为9,int指整型数据。
1)建立数据库STC,分别建立以上三张表,并完成数据录入。
(表结构及数据参见教材)建立数据库:数据库→右击鼠标→新建数据库,出现如上图所示的框,然后填上所建数据库的名称。
STU表建立表:数据库→ST C→右击鼠标→新建→表,出现如上所示的表,在表中填上所要的属性名及数据类型等,填完后点击左上角的关闭按钮后,会出现一个更改表明的框,进行命名,点击确定即可。
STU表数据录入COURSE 表数据录入SC表数据录入表数据的录入:数据库→ST C→表→STU(COURSE,SC)→右击鼠标→打开表→返回所有行,在如上所示的表中录入数据,输入后直接点击右上角的关闭按钮即可。
2)分析并建立各表的主码,用下划线在上面表结构中标出主码。
STU表的主码是sco,COURSE表的主码是cno,SC表的主码是cno,sno。
STC表的主码设置COURSE主码的设置SC主码设置主码的设置:右击表→设计表,出现如上所示的图,右击你要设置的那一属性名前的空格,出现设置主键,点击即可。
3)建立各表之间的关联,请简述操作步骤。
关联图如下:建立各表之间的关联:数据库→ST C→关系图→出现一个框图→点击你要关联的表→确定,得到如上所示的图,将它们之间的关联用线连起。
4)参考实验指导书的【第5章数据库的备份和还原】,使用企业管理器对数据库STC 进行备份,并尝试在个人电脑与机房电脑上进行还原,请简述备份、还原操作的步骤。
备份截图备份操作:数据库→ST C→右击→所有任务→备份数据库,得到如上所示的图,再选择你要备份到的地方。
还原截图还原操作:数据库→右击→所有任务→还原数据库,得到如上所示的图,从磁盘→选择路径→确定。
3.在SQL SERVER 2000 的查询分析器中使用SQL语言完成以下任务。
参考实验指导书《数据库系统实验指导教程》【实验 1.1 数据定义】,建立数据库SCHOOL,分别建立students、teachers、courses、choices四张表,表结构见实验指导书P236 【附录A】。
1)用SQL语言创建数据库、建表。
建表时为各表建立关键字、设置外码,数据暂不录入,请写出对应的SQL命令。
创建数据库create database SCHOOL建立学生表CREATE TABLE students(sid char(10) primary key,sname char(30) not NULL,email char(30) ,grade int,);建立教师表CREATE TABLE teachers(tid char(10) PRIMARY KEY,tname char(30)not NULL,emai char(30),salary int,);建立课程表CREATE TABLE courses(cid char(10) PRIMARY KEY,cname char(30)not NULL,hour int,);建立选课表create table choices(no int PRIMARY KEY,sid char(10) not NULL,tid char(10),cid char(10) not NULL,score int,FOREIGN KEY(sid)REFERENCES student(sid),FOREIGN KEY(cid)REFERENCES course (cid),FOREIGN KEY(tid)REFERENCES teachers (tid),);2)为students表、courses建立按主键増序排列的索引,请写出相应的SQL命令。
create unique index studentsid on student(sid);create unique index coursecid on course(cid);3)删除course上的索引,请写出相应的SQL命令。
drop index course.coursecid4)在SCHOOL数据库中的students表中增加一个“出生日期”字段,类型为日期时间型,请写出对应的SQL命令。
alter table student add ‘出生日期’ datetime5)删除students中的“出生日期”字段,请写出对应的SQL命令。
alter table student drop column ‘出生日期’6)删除SCHOOL数据库中的students表,请写出对应的SQL命令。
Drop table student cascade4.使用企业管理器创建数据库SCHOOL,实现内容与实验预习内容3完全相同。
5.使用企业管理器,将SCHOOL数据库分离出MS SQL SERVER,请简述步骤。
分离数据库操作:数据库→SCHOO L→右击→所有任务→分离数据库,出现如上所示的框图,点击确定即可。
6.使用企业管理器,使用【数据库/所有任务/附加数据库】将SCHOOL数据库添加进SQLSERVER,并查看数据。
附加操作截图查看数据截图附加数据库操作:数据库→右击→所有任务→附件数据库,从设备中找到SCHOOL_mdf,确定即可。
查看数据:数据库→SCHOO L→表→选择查看到的表→右击→打开表→返回所有行。
7.使用查询分析器,删除数据库STC,请写出对应的SQL命令。
DROP DATABASE STC;8.结束本次实验三、实验课后训练1.使用企业管理器练习数据的导入导出。
1)将SCHOOL数据库students表中的数据导出到STC数据库对应的stu表中;2)向STC数据库courses表导入SCHOOL数据库courses表中的数据;3)自行练习实验指导书【实验5.3 SQL SERVER数据库的导入与导出】部分;2.自行练习实验指导书【实验1.1数据定义】部分。
四、实验报告1.简述本次实验所用到的SQL命令及其功能。
创建数据库create database <数据库名>创建表create table <表名>创建索引create unique index <索引名>on <表名>(<列名>)增加属性alter table <表名> add <列名><数据类型>删除某属性名alter table <表名> drop column <列名>删除某表Drop table <表名>删除数据库DROP DATABASE <数据库名>2.在MS SQL SERVER中数据库的“分离|添加”与“备份|还原”是相同的功能吗?答:不相同。
数据库的备份是数据库结构、对象和数据的“副本”,使得数据库系统在发生故障后还能还原和恢复数据库中的数据。
数据库的还原是数据库备份的逆操作,将数据库恢复到备份前的状态。
数据库的分离指的是将数据库的附加的逆过程,就是把完整地数据库文件和日志文件从服务器上分离下来,分离后的数据库文件在拷贝和移动后可以附加在其他的计算机上,附加是分离的逆过程。
3.实验总结(实验过程中出现的问题、解决方法、结果如何或其它)出现的问题:①在这次实验过程中,对数据库进行了备份,再下次实验时无法还原数据库了。
②在写为SCHOOL数据库中的students表中增加一个“出生日期”字段,类型为日期时间型是,我写的命令是al ter table student add ‘出生日期’ date,提示我没有此类型。
③在写删除SCHOOL数据库中的students表这一命令时,出现如下错误:解决方法:问题一,问了同学,将数据库进行分离,再进行附加,则可以将上次的数据库重新放入电脑中;问题二,根据所给的提示将命令改为al ter table student add ‘出生日期’ datetime;问题三,通过找书上的相关知识,在未加cascade 时,表的删除是有限制条件的,存在依赖所删除的表的对象,所以无法删除,加上cascade,表的删除时没有限制条件的。
结果:命令的到正确的运行,实验完成。
通过这次实验,对SQL的一些命令及其功能有了了解,同时在实验中还要养成良好的实验习惯,做实验要细心,提前预习,这样可以大大减少实验的错误率。
实验二——SQL语句一、实验目的1.熟悉SQL的数据查询语言,能使用SQL进行单表查询、连接查询、嵌套查询、集合查询和统计查询,能理解空值的处理;2.熟悉数据库的数据更新操作,能使用SQL语句对数据库进行数据的插入、更新、删除操作;3.熟悉SQL支持的有关视图的操作,能创建、查询及取消视图;4.了解NULL在数据库中的特殊含义,掌握使用SQL进行与空值相关的操作;二、实验预习内容在认真阅读教材及实验指导书【实验1.2 数据查询】、【实验1.3 数据更新】、【实验1.4 视图】和【实验1.6 空值和空集的处理】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。
1.使用SCHOOL数据库,在SQL SERVER 2000 的查询分析器中使用SQL语言完成以下操作。
请在空白处填写相应的SQL命令。
1)查询年级为2001的所有学生的名称,按编号顺序排列;select sname from studentswhere grade=2001order by sid ASC2)查询所有课程名称中含有data的课程编号;select cid from courseswhere cname='data'3)统计所有老师的平均工资;select avg(salary)from teachers4)查询至少选了3门课的学生编号;select sidfrom choicesgroup by sidhaving count(cid)>=35)查询学号为800009026的学生的姓名、所选课名及成绩;select students.sname,ame,choices.scorefrom students,courses,choiceswhere students.sid=800009026 and students.sid=choices.sid and courses.cid=choices.cid6)查询没有学生选的课程编号;select cidfrom courseswhere cid not in(select cidfrom choices)7)查询既选了C++又选了Java课程的学生编号;select sid from choiceswhere cid =(select cid from courseswhere cname='C++') and sid in (select sid from choiceswhere cid=(select cid from courseswhere cname='Java'))8)查询选了C++但没选Java课程的学生编号;select distinct sid from choiceswhere cid =(select cid from courseswhere cname='C++') and sid not in (select sid from choiceswhere cid=(select cid from courseswhere cname='Java'))9)向STUDENTS表中插入“LiMing”的个人信息(编号:700045678,名字:LiMing,Email:LX@,年级:1992);insertinto students(sid,sname,email,grade)values('700045678','LiMing','LX@','1992')10)将“LiMing”的年级改为2002;update studentsset grade='2002'where sname='LiMing'11)删除所有选了Java课程的学生选课记录;deletefrom choiceswhere 'Java'=(select cnamefrom courseswhere courses.cid=choices.cid)12)求出每门课的课程号、选课人数,结果存入数据库表T1中。