数据库实验指导书含解答.docx
《数据库实验指导书含解答.docx》由会员分享,可在线阅读,更多相关《数据库实验指导书含解答.docx(41页珍藏版)》请在冰豆网上搜索。
数据库实验指导书含解答
数据库
实验指导书
巢湖学院计算机科学与技术系
巢湖学院实验教学中心
2009年2月
目录
实验一SQLSEVER2000的系统工具及用户管理、使用交互方式建库、建表.....................................................3
实验二T—SQL的简单查询、连接查询.....................16
实验三子查询及组合....................................24
实验四数据库的更新、视图的定义及使用..................26
实验五数据导入/导出、数据备份和恢复....................28
实验六数据完整性和数据安全性...........................29
实验七存储过程和触发器.................................31
实验八嵌入式SQL.......................................33
实验一SQLSEVER2000的系统工具及用户管理、使用交互方式建库、建表
一、实验目的:
认识SQLSEVER2000的服务管理器,了解客户端和数据库服务器的连接过程,初步掌握和使用EnterpriserManager以交互方式创建数据库、表、索引和修改表结构,熟练掌握使用EnterpriserManager向数据库输入数据、修给数据和删除数据的操作。
二、实验内容:
1.启动数据库服务软件SQLServer2000:
在程序菜单中选择MicrosoftSQLServer,如图1-1所示:
图1-1
再选中服务管理器,如图1-2所示:
图1-2
点击服务管理器后,出现SQLServer服务管理器,如图1-3所示:
图1-3
点击“开始/继续”按钮,启动SQLServer2000数据库服务。
启动成功后,在时钟旁边出现一个
符号,如图1-4所示。
图1-4
2.在SQLServer2000中建立数据库:
在程序菜单中选择MicrosoftSQLServer,如图1-5所示:
图1-5
再选中企业管理器,如图1-6所示:
图1-6
点击企业管理器后,出现企业管理器的主界面,如图1-7所示:
图1-7
点击左边树状控制栏的+/-号可以打开和关闭SQLServer组中的本地服务项目,在选中数据库服务项目后,单击鼠标右键,出现数据库的菜单,如图1-8所示:
图1-8
点击新建数据库,出现新建数据库窗口,如图1-9所示:
图1-9
输入数据库名称:
Test,点击数据文件选项卡,如图1-10所示:
图1-10
在数据文件中,你可以设定数据文件的名称,所在目录以及文件的大小等信息。
完成后点击事务日志选项卡,如图1-11所示:
图1-11
事务日志中,你可以设定日志文件的名称,所在目录以及文件的大小等信息。
接受系统的缺省值,点击确定按钮,完成数据库的新建,如图1-12所示。
图1-12
3.在Test数据库上建立表:
点击数据库Test前面的+号,打开数据库的各种属性,如图1-13所示:
图1-13
选中表的属性,单击鼠标右键,出现表的菜单,如图1-14所示:
图1-14
点击新建表按钮,出现新建表窗口,如图1-15所示:
图1-15
输入列名,数据类型,长度等信息,点击
图标,出现选择表名窗口,如图1-16所示:
图1-16
输入表名,点击确定按钮,将新建的表存盘。
三、实验任务:
1.用数据库SQLServer2000的服务管理器启动数据库服务;
2.用数据库SQLServer2000的企业管理器建立一个数据文件名为Studentdata、日志文件名为Studentlog、大小25M的新数据库,该数据库名为Student。
3.在数据库Student上,建立如下所示的表Student,Course,SC的结构:
Student:
表1-1
字段名
类型
长度
含义
Sno
varchar
9
学号
Sname
varchar
20
姓名
Ssex
varchar
2
性别
Sage
snallint
4
年龄
Sdept
varchar
10,2
系
Course:
表1-2
字段名
类型
长度
含义
Cno
varchar
4
课程号
Cname
varchar
40
课程名
Cpno
varchar
4
先行课
Ccredit
smallint
4
学分
SC:
表1-3
字段名
类型
长度
含义
Sno
varchar
9
课程号
Cno
varchar
4
成绩
Grade
varchar
smallint
根据以上表的结构,输入以下内容:
Student:
表1-4
学号
Sno
姓名
Smane
性别
Ssex
年龄
Sage
所在系
Sdept
200215121
李勇
男
20
CS
200215122
刘晨
女
19
CS
200215123
王敏
女
18
MA
200215125
张立
男
19
IS
Course:
表1-5
课程号Cno
课程名Cname
先行课Cpno
学分Credit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL语言
6
4
SC:
表1-6
学号Cno
课程号Cno
成绩Grade
200215121
1
92
200215121
2
85
200215121
3
88
200215122
2
90
200215122
3
80
4.定义数据库
CreateDB数据库名;
5.定义模式
CREATESCHEMA〈模式名〉AUTHORIZATION〈用户名〉
6.定义基本表
CREATETABLE〈表名〉(〈列名〉〈数据类型〉[列级完整性约束条件]
[,〈列名〉〈数据类型〉[列级完整性约束条件]]
……[,〈表级完整性约束条件〉]);
[例]建立一个“学生”表Student。
CREATETABLEStudent
(SnoCHAR(9)PRIMARYKEY,
SnameCHAR(20)UNIQUE,
SsexCHAR
(2),
SageSMALLINT,
SdeptCHAR(20)
);
[例]建立一个“课程”表Course。
CREATETABLECourse
(CnoCHAR(9)PRIMARYKEY,
CnameCHAR(40),
SpnoCHAR(4),
CcreditSMALLINT,
FOREINGKEYCpnoREFERENCESCourse(Cno)
);
[例]建立学生选课表。
CREATETABLESC
SnoCHAR(9),
CnoCHAR(9),
GradeSMALLINT,
PRINARYKEY(Sno,Cno),
FOREINGKEY(Sno)REFERENCESStudent(Sno),
FOREINGKEY(Cno)REFERENCESCourse(Cno)
);
实验二T—SQL的简单查询、连接查询
一、实验目的:
掌握SQLServerQueryAnalyze的使用方法,加深对SQL的语句,特别是对查询语句的理解。
本次实验了解SQLServer2000查询分析器的启动,熟悉如何在SQLServer2000查询分析器中建表、插入记录、查询记录。
学会SQLServer2000的查询分析器中建表、插入记录、查询记录。
二、实验内容:
1.启动数据库服务软件SQLServer2000的查询分析器:
在程序菜单中选择MicrosoftSQLServer,如图2-1所示:
图2-1
再选中查询分析器,如图2-2所示:
图2-2
点击查询分析器后,出现连接到SQLServer窗口,如图2-3所示:
图2-3
点击
按钮,出现选择服务器窗口,如图2-4所示。
图2-4
选择本地服务(Local),点击确定按钮。
再点击连接到SQLServer窗口的确定按钮。
出现SQL查询分析器主界面,如图2-5所示。
图2-5
选择查询菜单,点击更改数据库,如图2-6所示。
图2-6
出现选择数据库窗口,如图2-7所示。
图2-7
选择在上次实验中建立的数据库Test,点确定按钮。
2.在查询分析器中建立表:
在查询分析器的查询窗口中输入SQL语句,如图2-8所示。
图2-8
点击
按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图2-9所示。
图2-9
提示命令成功完成,或者报告出错信息。
3.查询分析器中向表添加数据:
在查询分析器的查询窗口中输入SQL语句,如图2-10所示。
图2-10
点击
按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图2-11所示。
图2-11
1.从表中查询数据:
在查询分析器的查询窗口中输入SQL语句,如图2-12所示。
图2-12
点击
按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图2-13所示。
图2-13
三、实验任务
1.打开数据库SQLServer2000的查询分析器,利用实验一所建立的库Student,针对改库中的表Student,Course,Sc作如下操作:
1.查询全体学生的学号与姓名答:
selectsno,snamefromstudent
2.查询全体学生的姓名、学号、所在系答:
selectsname,sno,sdeptfromstudent
3.查询全体学生的详细记录答:
select*fromstudent
4.查询全体学生的姓名及其出生年份答:
selectsname,2010-sagefromstudent
5.查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示所有系名。
答:
selectsname,'yearofbirth:
',2010-sage,lower(sdept)fromstudent
6.查询选修了课程的学生学号答:
selectdistinctsnofromsc
7.查询计算机科学系全体学生的名单答:
selectsnamefromstudentwheresdept='cs'
8.查询所有年龄在20岁以下的学生姓名及其年龄答:
selectsname,sagefromstudentwheresage>20
9.查询考试成绩有不及格的学生的学号答:
selectdistinctsnofromscwheregrade<60
10查询年龄在20~30岁之间的学生的姓名、系别和年龄。
答:
selectsname,sdept,sagefromstudentwheresagebetween20and30
11.查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别答:
selectsname,ssexfromstudentwheresdeptnotin('cs','ma','is')
12.查询学号为200215121的学生的详细情况答:
select*fromstudentwheresno='200215121'
13.查询所有姓刘的学生的姓名、学号和性别答:
selectsname,sno,ssexfromstudentwheresnamelike'刘%'
14.查询某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
答:
Selectsno,cnofromscwheregradeisnull
15.查询所有成绩的学生的学号和课程号答:
selectsno,cnofromscwheregradeisnotnull
16.查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列答:
selectsno,gradefromscwherecno='3'orderbygradededc
17查询选修课程的学生人数答:
selectcount(distinctsno)fromsc
18查询选修了1号课程的学生最高分数答:
selectmax(grade)
fromsc
wherecno='1'
19.求各个课程及相应的选课人数答:
selectcno,count(sno)
formsc
groupbycno
20.查询每个学生及其选修课程的情况答:
selectstudent.*,sc.*
fromstudent,sc
wherestudent.sno=sc.sno
21查询每一门课的间接选修课答:
selecto,second.cpno
fromcoursefirst,coursesecond
wherefirst.cpno=o
22.查询每个学生的学号、姓名、选修的课程名及成绩答:
selectstudent.sno,sname,cname,grade
fromstudent,sc,course
wherestudent.sno=sc.snoando=o
实验三子查询及组合
一、实验目的:
进一步掌握QueryAnalyzer的使用方法,加深对SQL和嵌套查询语句的理解,熟练掌握数据查询中分组、统计、计算和组合的操作方法。
二、实验内容:
1.启动数据库服务软件SQLServer2000的查询分析器,在RDMBS中建立一个数据库,进行实验所要求的各种操作,所有的SQL操作均在此建立的新库里进行。
2.根据以下要求认真进行实验,记录所有的实验用例。
数据定义:
基本表的定义。
数据操作:
完成子查询(分组,统计,计算和组合)。
三、实验任务:
打开数据库SQLServer2000的查询分析器,根据实验一:
所建立的数据库Student,在此库下所建立的三个表Student,SC,Course。
完成如下的功能的实验:
(1).带有IN谓词的子查询
(2).带有比较运算符的子查询
(3).带有ANY(SOME)或ALL谓词的子查询
(4).带有EXISTS谓词的子查询
实验的步骤如下:
1.查询与“刘晨”在同一个系学习的学生
答:
selectsno,sname,sdept
fromstudent
wheresdeptin(selectsdept
fromstudent
wheresname='刘晨')
2.查询选修了课程名为“信息系统”的学生学号和姓名selectsno,sname
fromstudentwheresnoin
(selectsno
fromsc
wherecnoin
(selectcno
fromcourse
wherecname='信息系统')
3.找出每个学生超过他选修课程平均成绩的课程号
答:
selectsno,cno
fromscx
wheregrade>=(selectavg(grade)
fromscy
wherey.sno=x.sno)
4.查询其他系中比计算机科学系某一个学生年龄小的学生的姓名和年龄
答:
selectsname,sage
fromstudent
wheresagefromstudent
wheresdept='cs')
andsdept<>'cs'
5.查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄
答:
selectsname,sage
fromstudent
wheresagefromstudent
wheresdept='cs')
andsdept<>'cs'
6.查询所有选修了1号课程的学生姓名
答:
selectsname
fromstudent
whereexists
(select*
fromsc
wheresno=student.snoandcno='1')
7.查询没有选修1号课程的学生姓名
答:
selectsname
fromstudent
wherenotexists
(select*
fromsc
wheresno=student.snoandcno='1')
8.查询选修了全部的学生姓名
答:
selectsname
fromstudent
wherenotexists(select*
fromcourse
wherenotexists(select*
fromsc
wheresno=student.sno
andcno=o))
9.查询至少选修了学生200215122选修的全部课程的学生号码
答:
selectdistinctsno
fromscscx
wherenotexists(select*
fromscscy
wherescy.sno='200215122'and
notexists
(select*
fromscscz
wherescz.sno=scx.snoand
o=o))
10查询计算机科学系的学生及年龄不大于19岁的学生
答:
select*
fromstudent
wheresdept='cs'
union
select*
fromstudent
wheresage<=19
11.查询选修了课程1或者选修了课程2的学生
答:
selectsno
fromsc
wherecno='1'
union
selectsno
fromsc
wherecno='2'
12.查询计算机科学系的学生与年龄不大于19岁的学生的交集
答:
select*
fromstudent
wheresdept='cs'andsage<=19
13.查询既选修了课程1又选修了课程2的学生。
答:
selectsno
fromsc
wherecno='1'andsnoin(selectsno
fromsc
wherecno='2')
14.查询计算机科学系的学生与年龄不大于19岁的学生的差集
答:
select*
fromstudent
wheresdept='cs'andsage>19
实验四数据库的更新、视图的定义及使用
一、实验目的:
掌握SQL中的插入、修改和删除语句的用法;掌握视图创建语句和视图创建向导的使用方法,加深对视图作用的理解。
二、实验内容:
1.启动数据库服务软件SQLServer2000的查询分析器,用如下语句对表进行操作,详细的语法格式参看课本相应章节:
Insertinto表名…插入数据
Update表名Set…修改数据
DeleteFrom表名…删除数据
DropTable删除表
AlterTable更改表
2.用如下语句对视图进行操作,详细的语法格式参看课本相应章节:
CreateView建视图
DropView删除视图
三、实验任务
1.打开数据库SQLServer2000的查询分析器,根据实验一:
所建立的数据库Student,在此库下所建立的三个表Student,SC,Course。
完成如下的功能的实验:
1.将一个新学生元组(学号:
200215128;姓名:
陈冬;性别:
男;所在系:
IS;年龄:
18岁)插入到Student表中
答:
insertintostudent
(sno,sname,ssex,sdept,sage)
values('200215128','陈冬','男','is',18)
2.将学生张成民的信息插入到Student表中
答:
insertintostudent
values('200215126','张成民','男',18,'cs')
3.插入一条选课记录(‘200215128’,‘1’)
答:
insertintosc('sno','cno')
values('200215128','1')
4.对每一个系,求学生的平均年龄,并把结果存入数据库
答:
createtabledept_age
(sdeptchar(15),
avg_agesmallint)
insertintodept_age(sdept,avg_age)
selectsdept,avg(sage)
fromstudent
groupbysdept
5.将一个学生200215121的年龄增加1岁
答:
updatestudent
setsage=sage+1
6.将计算机科学系全体学生的成绩置零
答:
updatesc
setgrade=0
where'cs'=(
selectsdept
fromstudent
wherestudent.sno=sc.sno)
7.删除学号为200215128的学生的记录
答;delete
fromstudent
wheresno='200215128'
8.删除所有的学生选课记录
答:
delete
fromsc
9.删除计算机科学系所有学生的选课记
答:
delete
fromsc
where'cs'=(selectsdept
fromstudent
wherestudent.sno=sc.sno)
10.建立信息系学生的视图
答:
createviewIS_Student
as
selectsno,sname,sage
fromstudent
wheresdept='IS'
11.建立信息系选修了1号课程的学生的视图
答:
createviewIS_S1(sno,sname,grade)
as
selectstudent.sno,sname,grade
fromstudent,sc
wheresdept='IS'and
student.sno=sc.snoand
o='1'
12定义一个反映学生出生年份的视图
答:
createviewBT_S(sno,sname,sbirth)