数据库原理实验教学手册.docx
《数据库原理实验教学手册.docx》由会员分享,可在线阅读,更多相关《数据库原理实验教学手册.docx(39页珍藏版)》请在冰豆网上搜索。
数据库原理实验教学手册
创新源于实践
《数据库原理》
课程实验教学手册
专业:
班级:
级班
学号:
姓名:
任课教师:
时间:
年月日
综合成绩:
计算机科学与技术学院《数据库原理》课程组
实验手册使用及要求
实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性、规范性、正确性、有效性。
现将实验报告撰写的有关内容说明如下:
1、实验预习报告必须在实验前完成。
2、实验时带好实验手册指导教师签字后方可进行实验。
3、实验时按实验预习报告内容进行实验。
并如实填写实验过程及实验中存在的问题分析及解决办法。
3、实验结束后填写通过后的源程序和对实验改进建议。
4、通过后的源程序可以手写也可以打印粘贴。
5、每个实验中教师签名一栏,学生不能填写,供指导教师检查完实验预习报告后签字使用。
6、实验位置填写应为:
实验室编号__实验台.如:
107-01。
7、实验九为综合实验。
共设计个题目,分组进行设计和实验。
要求见实验指导。
前言
一、实验目的:
数据库原理是一门应用性很强的课程,上机实验是数据库课程的重要环节。
本实验是结合《数据库概论》课程的学习而开设的实验。
本实验目的如下:
1.通过上机实验,加深对数据库系统理论知识的理解,增加对网络环境下大型数据库的感性认识和实际操作能力;
2.通过使用具体的DBMS,了解一种实际的数据库管理系统,并掌握其操作技术。
3.学习使用SQL语言,加深对SQL语言的认识和理解,提高SQL语言的实际应用能力;
4.加强对事务处理、权限管理等概念的认识和理解。
二、适应专业:
计算机科学和技术专业
三、实验内容及学时安排:
实验序号
实验名称
实验性质
学时
页码
实验一
系统安装及界面认识
验证性实验
2
4-5
实验二
数据库的建立
验证性实验
2
6-7
实验三
数据库表的建立
验证性实验
4
8-11
实验四
SQL查询
验证性实验
6
12-15
实验五
变量、函数和控制语句
验证性实验
4
16-19
实验六
创建其它的数据库对象SQL
验证性实验
4
20-23
实验七
数据库安全性管理
验证性实验
2
24-27
实验九
综合实验
综合性实验
12
32-37
五、教材及参考文献
1、《数据库原理与应用》徐保民孙丽君人民邮电出版社2008
2、《数据库系统概论》(第三版)萨师煊王珊高等教育出版社2005
六、实验环境
实验要求如下软件环境:
Windows2000NTServer+SQLSERVER2000
七、成绩考核
上机实验考核采取实验报告和上机抽查检验相结合的方式。
每次实验结束后都必须写出实验报告。
实验内容
实验一
实验名称系统安装及界面认识、实验性质验证性、教师签名
实验学时数2学时、实验位置:
、实验日期:
年月日、
一、实验目的
1、了解SQLServer系统安装;
2、了解SQLServer系统构成;
3、了解系统各模块的的作用
二、实验要求
Windows2000/XP/2003操作系统;
SQLSERVER2000中文版软件;
三
、
实
验
内
容
预
习
报
告
一)、SQLSERVER2000中文版软件安装
二)、系统构成:
1、SQLsever服务
2、企业管理器
3、查询分析器
1、启动SQLsever服务:
如图所示,设置服务器和服务;
2、更改Sa密码:
四)系统各模块的的作用
1、数据库文件和文件组:
主数据文件(.mdf):
存储数据信息和数据库的启动信息。
每个数据库只能有一个主文件。
次数据文件(.ndf):
存储主数据文件未存储的数据,次数据文件,可有可无,也可以有多个。
日志文件(.ldf):
存储用于恢复数据库的所有日志文件,条个数据库至少有一个日志文件。
SQLSEVER数据库包含3个文件组:
主文件组:
包含主数据文件和任何其它的、没有放置到另一个文件组的文件。
所有系统文件都存于该文件中。
用户文件组:
在创建数据库命令、修改数据库文件和使用Filegroup关键字指定的文件组。
默认文件组:
包含所有在创建时没有指定到文件组的表和索引,每个数据库只能有一个默认文件组。
如果在创建数据库时,如果没有用Filegroup关键字指定文件组,则主文件为默认的文件组。
所有数据文件都存于该文件中。
五)、系统数据库和示例数据库:
1、系统数据库:
(1)master:
是总控数据库,保存了系统的全部系统信息、登录和系统配置,用户建立的其它数据库及信息。
应经常备份该数据库。
(2)tempdb:
保存所有的临时表和临时存储过程。
系统起动时将重建。
(3)model:
模板数据库,每创建一个新的数据库,系统将自动地将模板数据库的内容复制一份到新的数据库中。
因此新数据库的内容和model是一样的。
如果想在新建数据库时加入一些固定内容,可将这些内容放到这里。
Model共有18个系统表、视图及存储过程。
其中:
syscolumns保存表和视图的每一列和存储过程的参数信息。
Sysobjects保存数据库中生成的数据库对象信息。
(4)msdb:
提供给SQLseverAgent服务使用,完成一些调度性工作,如备份和复制。
2、示例数据库:
pubs数据库:
图书出版方面的数据库实例。
Northwind:
贸易公司在世界范围内进出口销售情况的数据库。
四
、
实
验
过
程
实验过程、存在的问题及解决办法:
五、实验改进建议
实验二
实验名称数据库的建立、实验性质验证性、教师签名
实验学时数2学时、实验位置、实验日期年月日、
一、实验目的
1、利用各方法创建SQLServer数据库
2、修改与删除数据库
二、实验要求
掌握数据库的创建与删除
三
、
实
验
内
容
预
习
报
告
1、用向导创建数据库(UserDB1):
2、使用快捷方式创建数据库(UserDB2):
3、在查询设计器中用SQL命令创建数据库(UserDB3):
1)、简单命令格式:
createdatabase<数据库文件名>
2)、使用on和logon选项指定文件组和日志文件(userDB4)
createdatabaseuserdb4
on
(name=userdb4_data,--数据文件的逻辑名称,注意不能与日志逻辑同名
filename='g:
\xygl\userdb4.mdf',--物理名称,注意路径必须存在
size=5,--数据初始长度为5M
maxsize=10,--最大长度为10M
filegrowth=1)--数据文件每次增长1M
logon
(name=userdb4_log,filename='g:
\xygl\userdb4.ldf',size=2,maxsize=5,filegrowth=1)
3)、使用Primary和filegroup创建文件组和主文件(UserDB5):
createdatabaseuserdb5
on
primary
(name=db1,filename='g:
\sql\db_5.mdf',size=1,maxsize=10,filegrowth=10%),
(name=db2,filename='g:
\sql\db_5.mdf',size=2,maxsize=20,filegrowth=20%),
filegroupdb_3
(name=db3,filename='g:
\sql\db5.mdf',size=2,maxsize=10,filegrowth=10%),
(name=db4,filename='g:
\sql\db4.mdf',size=1,maxsize=10,filegrowth=10%)
logon
(name=db1_log1,filename='g:
\sql\db5_log.ldf',size=1,maxsize=10,filegrowth=2),
(name=db2_log2,filename='g:
\sql\db5_log.ldf',size=1,maxsize=10,filegrowth=1)
3、修改数据库结构修改:
1)、采用企业管理器修改数据库UserDB1:
2)、利用命令在查询设计器中修改数据库UserDB1
添加文件组:
alterdatabaseuserdb1addfilegroupuserdb1_group
将一个新的数据库文件userdb2添加到文件组中:
alterdatabaseuserdb1addfile
(name=userdb2,filename=’g:
\xygl\userdb2.mdf’)tofilegroupuserdb1_group
修改数据库初始长度
alterdatabaseuserdb1modifyfile
(name=userdb2,size=2)
修改数据库名:
将UserDB3改名为UserDBS
execsp_dboption‘userdb3’,’singleuser’,true--将数据库设为单用户模式
execsp_renamedb‘userdb3’,’userdbs’--改名
execsp_dboption‘userdbs’,’singleuser’,false--将数据库设为多用户模式
删除数据库:
(1)、在企业管理器和查询设计器中删除数据库Userdb1和Userdb2。
(2)、命令格式:
dropdatabase<数据库名>
例:
利用命令删除数据库Userdbs
dropdatabaseuserdbs--删除userdb数据库。
4、数据库的打开命令:
格式:
use<数据库名>
例:
利用命令打开数据库UserDB4
四、
实
验
过
程
实验过程、存在的问题及解决办法:
五、实验改进建议
实验三
实验名称数据库表的建立、实验性质验证性、教师签名
实验学时数4学时、实验位置、实验日期年月日、
一、实验目的
1、据库表的创建方法、数据类型的设置
2、表结构的修改
3、录入、插入和修改数据
二、实验要求
掌握基本表的建立,表结构的修改,数据的录入、插入以及修改
三
、
实
验
内
容
预
习
报
告
一)表的创建:
1、利用企业管理器设计表:
例1:
利用企业管理器创建学生选课数据库的如下表:
学生student
学号(sno)
姓名(sname)
性别(ssex)
年龄(sage)
所在系(department)
char(5)(主键、聚集索引)
char(20)
char
(2)
int
char(15)
2、在查询设计器中利用SQL命令创建下表
课程表course
课程号(cno)
课程名(cname)
先修课程号(pcno)
学分(credit)
char(5)(主键,非空)
char(20)
char(5)
int
选课表selcourse
学号(cno)
课程号(cname)
成绩(grade)
char(5)(外键约束)
char(5)(外键约束)
int
二)、表结构的修改:
1、修改列属性:
例:
利用命令将Student表中的cno字段设为不能为空(notnull)
2、添加列:
例:
利用命令在将Student表中添加E-mail字段:
类型为varchar(20)
3、添加约束:
例:
利用命令将Student表中的sage字段设置为只允许为数字:
4、取消约束:
例:
利用命令将Student表中的cno字段约束取消。
5、删除约束:
例:
利用命令首先创建一个有主键约束的表,然后将其删除
如:
createtableds(jkintconstraintpk_dsprimarykey)
//创建ds表,并建主约束pk_ds
altertabledsdroppk_ds//删除约束
go
6、删除列:
例:
利用命令将Student表中的E-mail字段删除
altertable(***)dropcolumn(***)--注意如果有列约束,应先删除。
三)录入、插入和修改数据
1、在企业管理器中添加数据:
右击表选择[打开表]/[返回所有行]命令,即可进行录入。
2、在查询设计器中利用insert命令插入记录方式:
例:
向department表追加记录
insertdepartmentvalues(‘01’,’信息工程’,’信息’,’成榕’)
2、采用insert…select语句添加数据
例:
从其它数据库表中成批添加记录。
insertdepartment(xdh,xqc,xjc)selectxdh,xqc,xjcfromxygl.dbo.department
3、修改表中的记录:
1)、在企业管理器中打开表直接修改
2)、在查询设计器中用update..set命令修改记录
例:
更改student表中指定学号学生的姓名
updatestudentsetsname='王小宝'wherecno=’01005’
4、删除表中的记录:
例:
删除student表中姓名中含有“王”的记录。
deletefromstudentwheresnamelike‘%王%’
例:
删除student表中的所有记录,相当于清空数据表
Deletefromstudent
5、删除表:
例:
删除当前数据库表student:
dropstudent
例:
删除其它数据库表:
droptable<数据库.所有者.表名>
四、
实
验
过
程
实验过程、存在的问题及解决办法:
五、
实验改进建议
实验四
实验名称SQL查询、实验性质设计性、教师签名
实验学时数6学时、实验位置、实验日期年月日、
一、实验目的
1、掌握基本查询
2、掌握嵌套查询
3、量词与谓词的应用
4、利用聚合函数进行数据统计
二、实验要求
掌握常用的SQL查询及聚合函数的应用
三
、
实
验
内
容
预
习
报
告
二、实验内容:
一)查询
例1:
(选择表中的若干列)求全体学生的学号、姓名、性别和年龄。
例2:
(不选择重复行)求选修了课程的学生学号。
例3:
(选择表中的所有列)求全体学生的详细信息。
例4:
(使用表达式)求全体学生的学号、姓名和出生年份。
例5:
(使用列的别名)求学生的学号和年龄,显示时使用别名“学号”和“年龄”。
例6:
(比较大小条件)求年龄大于19岁的学生的姓名和年龄。
例7:
(比较大小条件)求计算机系或信息系年龄大于18岁的学生的姓名、系和年龄。
例8:
(确定范围条件)求年龄在19岁与22岁(含20岁和22岁)之间的学生的学号和年龄。
例9:
(确定范围条件)求年龄不在19岁与22岁之间的学生的学号和年龄。
例10:
(确定集合条件)求在下列各系的学生信息:
数学系、计算机系。
例11:
(确定集合条件)求不是数学系、计算机系的学生信息。
例12:
(匹配查询)求姓名是以“李”打头的学生。
例13:
(匹配查询)求姓名中含有“志”的学生。
例14:
(匹配查询)求姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生。
例15:
(匹配查询)求选修课程C001或C003,成绩在80至90之间,学号为01xxx的学生的学号、课程号和成绩。
例16:
(涉及空值查询)求缺少学习成绩的学生的学号和课程号。
例17:
(控制行的显示顺序)求选修C003课程或C004课程的学生的学号、课程号和分数。
例18:
(组函数)求学生总人数。
例19:
(组函数)求选修了课程的学生人数。
例20:
(组函数)求计算机系学生的平均年龄。
例21:
(组函数)求选修了课程C001的最高、最低与平均成绩。
例22:
(分组查询)求各门课程的平均成绩与总成绩。
例23:
(分组查询)求各系的人数和平均年龄。
例24:
(分组查询)输入以下查询语句并执行,观察出现的其结果并分析其原因。
SELECTSNAME,DEPT,COUNT(*)FROMSTUDENTWHEREDEPT=’计科系’GROUPBYDEPT;
例25:
(分组查询)分析以下语句为什么会出现错误。
并给出正确的查询语句。
SELECTSAGEFROMSTUDENTGROUPBYSNO;
例26:
(分组查询)求学生人数不足3人的系及其相应的学生数。
例27:
(分组查询)求人数最多的系。
例28:
(涉及空值的查询)分别观察各组函数、行的显示顺序以及分组查询与空值的关系。
例29:
(自然连接查询)求学生号以及其选修课程的课程号和成绩,但查询结果中只能有一个SNO字段。
例30:
(连接查询)求选修了课程C001且成绩在70分以下或成绩在90分以上的学生的姓名、课程名称和成绩。
例31:
(连接查询与表的别名)求选修了课程的学生的学生姓名、课程号和成绩。
例32:
(自身连接查询)求年龄大于’李丽’的所有学生的姓名、系和年龄。
例33:
(外部连接查询)求选修了课程C002或C003的学生的学号、课程号、课程名和成绩。
例34:
(子查询)求与‘李丽’年龄相同的学生的姓名和系。
例35:
(子查询)求选修了课程名为’数据结构’的学生的学号和姓名。
例36:
(子查询ANY)求比数学系中某一学生年龄大的学生的姓名和系。
例37:
(子查询ALL)求比数学系中全体学生年龄大的学生的姓名和系。
例38:
(子查询EXISTS)求选修了课程C004的学生的姓名和系。
例39:
(返回多列的子查询)求与‘李丽’同系且同龄的学生的姓名和系。
例40:
(多个子查询)求与‘李丽’同系,且年龄大于‘黎明’的学生的信息。
例41:
(子查询中使用表连接)求数学系中年龄相同的学生的姓名和年龄。
例42:
(相关子查询)求未选修课程C004的学生的姓名。
例43:
(相关子查询)求选修了全部课程的学生的姓名。
例44:
(相关子查询)求至少选修了学生‘01002’所选修的全部课程的学生的学号。
例45:
(相关子查询)求成绩比所选修课程平均成绩高的学生的学号、课程号、和成绩。
例46:
(相关子查询)查询被一个以上的学生选修的课程号。
例47:
(相关子查询)查询所有未选课程的学生姓名和所在系。
二).SQL数据控制语句:
例1:
(授权并验证)给某用户授予在表Student上的SELECT权限,并使这两个用户具有给其他用户授予相同权限的权限。
例2:
(授权并验证)给某用户授予在表student上的INSERT权限,并使这两个用户不具有给其他用户授予相同权限的权限。
例3:
(授权并验证)给某用户授予在表student上对ssex字段的UPDATE权限,并使该用户不具有给其他用户授予相同权限的权限。
例4:
(授权并验证)给某用户授予student表上的所有权限。
例5:
(收回授权并验证)收回上面例子中的所有授予的权限。
四
、
实
验
过
程
实验过程、存在的问题及解决办法:
五、实验改进建议
实验五
实验名称SQL变量、函数和控制语句、实验性质验证性、教师签名
实验学时数4学时、实验位置、实验日期年月日、
一、实验目的
1、了解SQL变量的定义
2、了解SQL函数应用
3、SQL的控制语句的种类及应用;
4、case表达式的应用。
二、实验要求
掌握简单的SQL程序设计。
三
、
实
验
内
容
预
习
报
告
一)、局部变量(@变量):
1)用select语句对变量赋值:
例:
定义变量@blvarchar(50)
declare@blvarchar(50)--定义变量
select@bl='李华'--给变量赋初值
select@bl=snamefromstudentwheresno=“01005”
select@bl
注意:
如果找到变量改变,否则为初值。
2)用set命令赋值:
例:
将变量的值设为”中国福建”
declare@blchar(30)
set@bl=’中国福建’
select@bl
3)利用查询结果为变量赋值:
例:
观察下面语句:
declare@blint
set@bl=(selectcount(*)fromstudent)
select@blas记录数
二)、SQL函数:
例1、将student表中的sage转为字符型数据
select姓名,cast(基本工资aschar(10))as年龄fromstudent
select姓名,convert(char(10),基本工资)as年龄fromstudent
例2、字符串函数:
Replicate(‘南平’,2)结果为?
Reverse(字符串):
将字符串取反
reverse(‘南平’)结果为?
selectstuff('中国福建',3,2,'上海')--结果为?
selectstuff('abcd',3,2,'ef')--结果为”abef”注意两句的区别
substring(字符串,开始位置,长度):
与VFP的substr一样为取子串函数
selectsubstring('南京化工学院',3,2)--结果为?
例3:
日期函数:
selectdatepart(year,'2005-2-0312:
13:
30'),datepart(quarter,'2005-2-0312:
13:
30'),
datepart(month,'2005-2-0312:
13:
30'),datepart(day,'2005-2-0312:
13:
30'),
datepart(week,'2005-2-0312:
13:
30')
结果为?
三)、SQL控制语句
职工表如下:
职工(工号,姓名,婚否,基本工资,仓库号)
例1:
if语句应用:
在职工表中查找某一仓库的职工,如果有则统计人数,否则显示提示:
Usezgda
Go
declare@ckchar
(2)--定义一个仓库号变量
set@ck='01'--设置变量值
Ifexists(select*from职工where仓库号=@ck)--如果有
Selectcount(*)as人数from职工where仓库号=@ck--统计人娄
Else--否则
Prin