数据库上机实验报告sql server.docx
《数据库上机实验报告sql server.docx》由会员分享,可在线阅读,更多相关《数据库上机实验报告sql server.docx(18页珍藏版)》请在冰点文库上搜索。
数据库上机实验报告sqlserver
课程代码:
1010000450
数据库
Database
学分:
3总学时:
48实验学时:
16
面向专业:
信息与计算科学,数学与应用数学
一、实验教学目标
数据库是计算机科学与技术专业的专业必修课程。
课程内容主要包括:
数据模型、关系代数、关系数据库标准语言SQL、关系系统、关系数据理论、数据库设计方法。
学习本课程的过程中,只有通过上机实验,才能使学生真正深层次了解数据库系统的体系结构,掌握数据库系统的基础理论、技术和方法,掌握主流数据库管理系统SQLServer2000的应用技术及数据库应用系统的设计、开发能力。
二、实验教学基本要求
认真阅读教材中与实验相关的章节内容,提前做好实验准备,做到在每个实验前明确实验目的、掌握实验的基本内容及操作方法;在实验中正确使用实验设备,认真观察、分析实验结果;实验后要根据要求做好总结,写出实验报告。
三、实验教材或实验指导书
《数据库系统概论》,萨师煊王珊主编,高等教育出版社
四、考核方式与评分办法
实验成绩评定分两部分:
上机实验操作占50%,实验报告占50%。
五、实验项目设置
序号
实验项目名称
实验学时
实验类型
实验要求
主要设备(用品)
台(套)数
1
安装SQLServer2000
2
综合
必开
86
2
启动SQLServer2000和建库、表
2
综合
必开
86
3
SQLServer2000查询分析器
2
综合
必开
86
4
SQL语言的DDL
2
综合
必开
86
5
SQL语言的DML
2
综合
必开
86
6
DML的数据查询
2
综合
必开
86
7
SQL语言的DCL
2
综合
必开
86
8
SQL语言综合练习
2
综合
必开
86
六、实验内容与实验方式
实验一安装SQLServer2000
(一)实验内容
1.安装Microsoft的数据库服务软件SQLServer2000。
以sqlserver2000企业版为例安装教程
第一步:
打开安装文件中的“AUTORUN”文件,安装程序会自动运行出现版本选择界面,我们以选择企业版为例。
第二步:
在接下来的界面中选择“安装数据库服务器”选项。
第三步:
这时出现安装向导,出现“计算机名”窗口。
“本地计算机”是默认选项,其名称就显示在上面,我们按其默认点“下一步”。
第四步:
接下来,在“安装选择”对话窗口中,同样按其默认项“创建新的SQLServer实例,或安装客户端工具”点下一步。
第五步:
在"用户信息"窗口,输入用户信息,并接受软件许可证协议。
第六步:
在"安装定义"窗口,选择"服务器和客户端工具"选项进行安装。
我们需要将服务器和客户端同时安装,这样在同一台机器上,我们可以完成相关的所有操作,对于我们学习SQLServer很有用处。
如果你已经在其它机器上安装了SQLServer,则可以只安装客户端工具,用于对其它机器上SQLServer的存取。
第七步:
在"实例名"窗口,选择"默认"的实例名称。
这时本SQLServer的名称将和Windows2000服务器的名称相同。
第八步:
在"安装类型"窗口,选择"典型"安装选项,并指定"目的文件夹"。
第九步:
在"服务账号"窗口,请选择"对每个服务使用统一账户..."的选项。
在"服务设置"处,选择"使用本地系统账户"。
如果需要"使用域用户账户"的话,请将该用户添加至WindowsServer的本机管理员组中。
第十步:
在"身份验证模式"窗口,请选择"混合模式..."选项,并设置管理员"sa"账号的密码。
如果需要更高的安全性,则可以选择"Windows身份验证模式",这时就只有WindowsServer的本地用户和域用户才能使用SQLServer了。
第十一步:
在"选择许可模式"窗口,根据您购买的类型和数量输入(0表示没有数量限制)。
"每客户"表示同一时间最多允许的连接数,"处理器许可证"表示该服务器最多能安装多少个CPU。
笔者这里选择了"每客户"并输入了100作为示例。
第十二步:
约10多分钟的安装时间,然后打开开始菜单下的sql子目录下的企业管理器。
2.熟悉软件的使用以及各个组成部分。
第一:
打开企业管理器,可以对本地的数据进行管理,也可以登录服务器端,即可以远程操作自己的数据库;
第二:
登录查询分析器,可以通过sql管理语句,对数据库进行管理。
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQLServer2000,最后老师检查操作结果。
每次86组,每组1人。
实验二启动SQLServer2000和建库、表
(一)实验内容
1.启动数据库服务软件SQLServer2000。
第一步:
打开企业管理器,可以登录服务器端,即可以远程操作自己的数据库,登录步骤如下;
第二步:
左侧方框中控制台根目录的子目录的SQLserver组上,右击,并新建SQLserver注册…;
第三步:
在“服务器”一栏里输入想要登录的服务器ip地址,选择使用SQLserver身份验证,写入登录名和密码,就可以登录了。
第四步:
登录查询分析器,可以通过sql管理语句,对数据库进行管理。
2.在SQLServer2000中建立数据库。
第一步:
通过企业管理器进入服务器端以后,可以在数据库文件里“新建数据库”。
第二步:
输入数据库名称。
第三步:
通过相关需求对数据库的相关属性进行设置,然后完成。
3.在数据库上建立表。
第一步:
登录企业管理器
第二步:
进入自己的database,并打开“表”选项;
第三步:
在表选项右侧空白处,点击右键,选择“新建表…”;
第四步:
在弹出的窗口中,分别填写列名,数据类型,长度和是否允许空值,然后关闭窗口。
第五步:
关闭窗口会弹出是否保存表,选择是,接下来弹出的窗口中填写表名即可。
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQLServer2000,最后老师检查操作结果。
每次86组,每组1人。
实验三SQLServer2000查询分析器
(一)实验内容
1.启动数据库服务软件SQLServer2000的查询分析器。
第一步:
在登录企业管理器的前提下,登录查询分析器。
第二步:
登录查询分析器与登录企业管理器类似,需要输入ip地址或者如果是本地数据库,直接用windows身份验证即可。
2.在查询分析器中建立表。
第一步:
在查询分析器命令栏里输入以下语句:
定义一个学生-课程模式S-T
CREATESCHEMA“S-T”AUTHORIZATIONWANG
/*为用户WANG定义了一个模式S-T*/
然后点击“分析查询”和“执行查询”。
第二步:
在查询分析器命令栏里输入以下语句:
建立“学生”表Student,学号是主码,姓名取值唯一
CREATETABLEStudent
(SnoCHAR(9)PRIMARYKEY,/*列级完整性约束条件*/
SnameCHAR(20)UNIQUE,/*Sname取唯一值*/
SsexCHAR
(2),
SageSMALLINT,
SdeptCHAR(20)
);
然后点击“分析查询”和“执行查询”。
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQLServer2000,最后老师检查操作结果。
每次86组,每组1人。
实验四SQL语言的DDL
(一)实验内容
1.用如下语句对表进行操作:
CreateTable建表;DropTable删除表;AlterTable更改表。
CREATETABLEStudent
(SnoCHAR(4)PRIMARYKEY)
DROPTABLEStudent/*当Student表与其他数据有级联关系或者其他关系时,不能删除。
*/
ALTERTABLEStudentADDS_entranceDATENULL/*向Student表增加“入学时间”列,其数据类型为日期型*/
ALTERTABLEStudentDROPCOLUMNSno/*删除Student表中的Sno这一列,含有以下关系的列不能被删除:
∙被复制列。
∙用在索引中的列。
∙用在CHECK、FOREIGNKEY、UNIQUE或PRIMARYKEY约束中的列。
∙有相关联的默认值(由DEFAULT关键字定义)的列,或绑定到默认对象的列。
∙绑定到规则的列。
*/
2.用如下语句对视图进行操作:
CreateView建视图;DropView删除视图。
/*创建一个IS_Student视图,视图中返回来自于表Student中Sdept=’IS’的所有学生的Sno,Sname,Sage列*/
CREATEVIEWIS_Student
AS
SELECTSno,Sname,Sage
FROMStudent
WHERESdept='IS'
/*删除IS_Student视图*/
dropVIEWIS_Student
3.如下语句对索引进行操作:
CreateIndex建立索引;DropIndex删除索引。
/*创建一个Stusname索引,在Student表中以Sname列升序排列*/
CREATECLUSTEREDINDEXStusname
ONStudent(Sname)
/*删除Student表中的Stusname索引*/
DROPINDEXStudent.Stusname
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQLServer2000,最后老师检查操作结果。
每次86组,每组1人。
实验五SQL语言的DML
(一)实验内容
1.启动数据库服务软件SQLServer2000的查询分析器,用INSERT语句对表进行插入操作。
/*将一个新学生元组(学号:
200215128;姓名:
陈冬;性别:
男;所在系:
IS;年龄:
18岁)插入到Student表中*/
INSERT
INTOStudent(Sno,Sname,Ssex,Sdept,Sage)
VALUES('200215128','陈冬','男','IS',18)
/*学生张成民的信息插入到Student表中*/
INSERT
INTOStudent
VALUES('200215126','张成民',18,'CS','男')
/*对表Student中每一个系,求学生的平均年龄,并把结果存入表Dept_age表中。
*/
第一步:
CREATETABLEDept_age
(SdeptCHAR(15),/*系名*/
Avg_ageSMALLINT)/*学生平均年龄*/
第二步:
INSERT
INTODept_age(Sdept,Avg_age)
SELECTSdept,AVG(Sage)
FROMStudent
GROUPBYSdept
2.用UPDATE语句对表中已有的记录进行修改。
/*将学生200215121的年龄改为22岁*/
UPDATEStudent
SETSage=22
WHERESno='200215121'
/*将所有学生的年龄增加1岁*/
UPDATEStudent
SETSage=Sage+1
/*将CS系全体学生的成绩置零*/
UPDATESC
SETGrade=0
WHERE'CS'=(SELECTSdept
FROMStudent
WHEREStudent.Sno=SC.Sno)
3.用DELETE语句对表中已有的记录进行删除。
/*删除学号为200215128的学生记录*/
DELETE
FROMStudent
WHERESno='200215128'
/*删除所有的学生选课记录*/
DELETE
FROMSC
/*删除计算机科学系所有学生的选课记录*/
DELETE
FROMSC
WHERE'CS'=(SELECTSdept
FROMStudent
WHEREStudent.Sno=SC.Sno)
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQLServer2000,最后老师检查操作结果。
每次86组,每组1人。
实验六DML的数据查询
(一)实验内容
1.启动数据库服务软件SQLServer2000的查询分析器,用SELECT语句对表进行简单查询操作。
/*查询全体学生的学号与姓名。
*/
SELECTSno,Sname
FROMStudent;
/*查询全体学生的详细记录。
*/
SELECT*
FROMStudent;
/*指定DISTINCT关键词,去掉表中重复的行*/
SELECTDISTINCTSno
FROMSC
/*查询考试成绩有不及格的学生的学号*/
SELECTDISTINCTSno
FROMSC
WHEREGrade<60
/*查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄*/
SELECTSname,Sdept,Sage
FROMStudent
WHERESageBETWEEN20AND23
/*查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
*/
SELECTSname,Ssex
FROMStudent
WHERESdeptIN('IS','MA','CS')
/*查询学号为200215121的学生的详细情况。
*/
SELECT*
FROMStudent
WHERESnoLIKE'200215121'
/*查询选修1号课程的学生最高分数。
*/
SELECTMAX(Grade)
FROMSC
WHERECno=‘1‘
2.用SELECT语句对表进行连接查询操作,连接查询涉及被连接和连接两个表。
等值连接:
连接运算符为=
/*查询每个学生及其选修课程的情况*/
SELECTStudent.*,SC.*
FROMStudent,SC
WHEREStudent.Sno=SC.Sno
自然连接:
/*查询每个学生及其选修课程的情况*/
SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROMStudent,SC
WHEREStudent.Sno=SC.Sno
自身连接:
查询每一门课的间接先修课(即先修课的先修课)
SELECTFIRST.Cno,SECOND.Cpno
FROMCourseFIRST,CourseSECOND
WHEREFIRST.Cpno=SECOND.Cno
外连接:
/*查询每个学生及其选修课程的情况(包括Student表中不满足条件的元组)*/
SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROMStudentLEFTOUTJOINSCON(Student.Sno=SC.Sno);
复合条件连接:
WHERE子句中含多个连接条件:
/*查询每个学生的学号、姓名、选修的课程名及成绩*/
SELECTStudent.Sno,Sname,Cname,Grade
FROMStudent,SC,Course/*多表连接*/
WHEREStudent.Sno=SC.Sno
andSC.Cno=Course.Cno
3.用SELECT语句对表进行嵌套查询操作。
带有IN谓词的子查询:
/*查询与“刘晨”在同一个系学习的学生。
此查询要求可以分步来完成*/
SELECTSno,Sname,Sdept
FROMStudent
WHERESdeptIN
(SELECTSdept
FROMStudent
WHERESname='刘晨')
带有比较运算符的子查询
/*假设一个学生只可能在一个系学习,并且必须属于一个系,则在上例中可以用=代替IN*/
SELECTSno,Sname,Sdept
FROMStudent
WHERESdept=(SELECTSdept
FROMStudent
WHERESname='刘晨')
带有ANY(SOME)或ALL谓词的子查询
/*查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄*/
SELECTSname,Sage
FROMStudent
WHERESageFROMStudent
WHERESdept='CS')
ANDSdept<>'CS'/*父查询块中的条件*/
带有EXISTS谓词的子查询
查询没有选修1号课程的学生姓名。
SELECTSname
FROMStudent
WHERENOTEXISTS
(SELECT*
FROMSC
WHERESno=Student.SnoANDCno='1');
4.用SELECT语句对表进行组合查询操作。
/*查询计算机科学系的学生及年龄不大于19岁的学生。
*/
SELECT*
FROMStudent
WHERESdept='CS'
UNION/*UNION:
将多个查询结果合并起来时,系统自动去掉重复元组。
*/
SELECT*
FROMStudent
WHERESage<=19;
/*查询计算机科学系的学生与年龄不大于19岁的学生的交集*/
SELECT*
FROMStudent
WHERESdept='CS'
INTERSECT
SELECT*
FROMStudent
WHERESage<=19
/*sqlserver2000中没有INTERSECT的这样的用法*/
/*查询计算机科学系的学生与年龄不大于19岁的学生的差集。
*/
SELECT*
FROMStudent
WHERESdept='CS'
EXCEPT
SELECT*
FROMStudent
WHERESage<=19
/*sqlserver2000中没有EXCEPT的这样的用法*/.
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQLServer2000,最后老师检查操作结果。
每次86组,每组1人。
实验七SQL语言的DCL
(一)实验内容
1.启动数据库服务软件SQLServer2000的查询分析器,用GRANT语句对数据库存取权限进行授权操作。
/*把查询Student表权限授给用户U1*/
GRANTSELECT
ONStudent
TOU1
/*把对Student表和Course表的全部权限授予用户U2和U3,但是在sqlserver2000中不允许同时对多个表的授权语句*/
GRANTALLPRIVILEGES
ONStudent,Course
TOU2,U3;
/*把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户*/
GRANTINSERT
ONTABLESC
TOU5
WITHGRANTOPTION
2.用REVOKE语句将DBA(数据库管理员)、DBO(建库用户)授与其它用户对数据库的操作权收回。
/*把用户U4修改学生学号的权限收回*/
REVOKEUPDATE(Sno)
ONStudent
FROMU4;
/*收回所有用户对表SC的查询权限*/
REVOKESELECT
ONSC
FROMPUBLIC;
/*把用户U5对SC表的INSERT权限收回*/
REVOKEINSERT
ONTABLESC
FROMU5CASCADE
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQLServer2000,最后老师检查操作结果。
每次86组,每组1人。
实验八SQL语言综合练习
(一)实验内容
1.启动数据库服务软件SQLServer2000的查询分析器,用CreateTable建表;
/*建立“学生”表Student,学号是主码,姓名取值唯一。
*/
CREATETABLEStudent
(SnoCHAR(9)PRIMARYKEY,/*列级完整性约束条件*/
SnameCHAR(20)UNIQUE,/*Sname取唯一值*/
SsexCHAR
(2),
SageSMALLINT,
SdeptCHAR(20)
);
2.用InsertInto向表中插入记录;
/*将一个新学生元组(学号:
200215128;姓名:
陈冬;性别:
男;所在系:
IS;年龄:
18岁)插入到Student表中*/
INSERT
INTOStudent(Sno,Sname,Ssex,Sage,Sdept)
VALUES('200215128','陈冬','男',18,'IS')
3.用CreateIndex在表上建立索引;
/*创建一个Stusname索引,在Student表中以Sname列升序排列*/
CREATECLUSTEREDINDEXStusname
ONStudent(Sname)
/*删除Student表中的Stusname索引*/
4.用CreateView建立视图;
/*创建一个IS_Student视图,视图中返回来自于表Student中Sdept=’IS’的所有学生的Sno,Sname,Sage列*/
CREATEVIEWIS_Student
AS
SELECTSno,Sname,Sage
FROMStudent
WHERESdept='IS'
5.用SELECT语句进行各种查询操作。
/*查询全体学生的学号与姓名。
*/
SELECTSno,Sname
FROMStudent;
/*查询全体学生的详细记录。
*/
SELECT*
FROMStudent;
/*查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄*/
SELECTSname,Sdept,Sage
FROMStudent
WHERESageBETWEEN20AND23
/*查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
*/
SELECTSname,Ssex
FROMStudent
WHERESdeptIN('IS','MA','CS')
*查询学号为200215121的学生的详细情况。
*/
SELECT