课程代码:1010000450
数据库
Database
学分:3 总学时:48 实验学时:16
面向专业:信息与计算科学,数学与应用数学
一、实验教学目标
数据库是计算机科学与技术专业的专业必修课程。课程内容主要包括:数据模型、关系代数、关系数据库标准语言SQL、关系系统、关系数据理论、数据库设计方法。学习本课程的过程中,只有通过上机实验,才能使学生真正深层次了解数据库系统的体系结构,掌握数据库系统的基础理论、技术和方法,掌握主流数据库管理系统SQL Server 2000的应用技术及数据库应用系统的设计、开发能力。
二、实验教学基本要求
认真阅读教材中与实验相关的章节内容,提前做好实验准备,做到在每个实验前明确实验目的、掌握实验的基本内容及操作方法;在实验中正确使用实验设备,认真观察、分析实验结果;实验后要根据要求做好总结,写出实验报告。
三、实验教材或实验指导书
《数据库系统概论》,萨师煊 王珊主编,高等教育出版社
四、考核方式与评分办法
实验成绩评定分两部分:上机实验操作占50%,实验报告占50%。
五、实验项目设置
六、实验内容与实验方式
实验一 安装SQL Server 2000
(一)实验内容
1.安装Microsoft的数据库服务软件SQL Server 2000。
以sql server2000企业版为例安装教程
第一步:打开安装文件中的“AUTORUN”文件,安装程序会自动运行出现版本选择界面,我们以选择企业版为例。
第二步:在接下来的界面中选择“安装数据库服务器”选项。
第三步:这时出现安装向导,出现“计算机名”窗口。“本地计算机”是默认选项,其名称就显示在上面,我们按其默认点“下一步”。
第四步:接下来,在“安装选择”对话窗口中,同样按其默认项“创建新的SQL Server实例,或安装客户端工具”点下一步。
第五步:在 "用户信息" 窗口,输入用户信息,并接受软件许可证协议。
第六步:在 "安装定义"窗口,选择 "服务器和客户端工具" 选项进行安装。我们需要将服务器和客户端同时安装,这样在同一台机器上,我们可以完成相关的所有操作,对于我们学习SQL Server很有用处。如果你已经在其它机器上安装了SQL Server,则可以只安装客户端工具,用于对其它机器上SQL Server的存取。
第七步:在 "实例名" 窗口,选择 "默认" 的实例名称。这时本SQL Server的名称将和Windows 2000服务器的名称相同。
第八步:在 "安装类型" 窗口,选择 "典型" 安装选项,并指定 "目的文件夹"。
第九步:在 "服务账号" 窗口,请选择 "对每个服务使用统一账户..." 的选项。在 "服务设置" 处,选择 "使用本地系统账户"。如果需要 "使用域用户账户" 的话,请将该用户添加至Windows Server的本机管理员组中。
第十步:在 "身份验证模式" 窗口,请选择 "混合模式..." 选项,并设置管理员"sa"账号的密码。如果需要更高的安全性,则可以选择 "Windows身份验证模式" ,这时就只有Windows Server的本地用户和域用户才能使用SQL Server了。
第十一步:在 "选择许可模式" 窗口,根据您购买的类型和数量输入(0表示没有数量限制)。 "每客户"表示同一时间最多允许的连接数,"处理器许可证"表示该服务器最多能安装多少个CPU。笔者这里选择了 "每客户" 并输入了100作为示例。
第十二步:约10多分钟的安装时间,然后打开开始菜单下的sql子目录下的企业管理器。
2.熟悉软件的使用以及各个组成部分。
第一:打开企业管理器,可以对本地的数据进行管理,也可以登录服务器端,即可以远程操作自己的数据库 ;
第二:登录查询分析器,可以通过sql管理语句,对数据库进行管理。
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。
实验二 启动SQL Server2000和建库、表
(一)实验内容
1.启动数据库服务软件SQL Server 2000。
第一步:打开企业管理器,可以登录服务器端,即可以远程操作自己的数据库,登录步骤如下;
第二步:左侧方框中控制台根目录的子目录的SQL server组上,右击,并新建SQL server注册…;
第三步:在“服务器”一栏里输入想要登录的服务器ip地址,选择使用SQL server身份验证,写入登录名和密码,就可以登录了。
第四步:登录查询分析器,可以通过sql管理语句,对数据库进行管理。
2.在SQL Server 2000中建立数据库。
第一步:通过企业管理器进入服务器端以后,可以在数据库文件里“新建数据库”。
第二步:输入数据库名称。
第三步:通过相关需求对数据库的相关属性进行设置,然后完成。
3.在数据库上建立表。
第一步:登录企业管理器
第二步:进入自己的database,并打开“表”选项;
第三步:在表选项右侧空白处,点击右键,选择“新建表…”;
第四步:在弹出的窗口中,分别填写列名,数据类型,长度和是否允许空值,然后关闭窗口。
第五步:关闭窗口会弹出是否保存表,选择是,接下来弹出的窗口中填写表名即可。
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。
实验三 SQL Server2000查询分析器
(一)实验内容
1.启动数据库服务软件SQL Server 2000的查询分析器。
第一步:在登录企业管理器的前提下,登录查询分析器。
第二步:登录查询分析器与登录企业管理器类似,需要输入ip地址或者如果是本地数据库,直接用windows身份验证即可。
2.在查询分析器中建立表。
第一步:在查询分析器命令栏里输入以下语句:
定义一个学生-课程模式S-T
CREATE SCHEMA “S-T” AUTHORIZATION WANG
/*为用户WANG定义了一个模式S-T*/
然后点击“分析查询”和“执行查询”。
第二步:在查询分析器命令栏里输入以下语句:
建立“学生”表Student,学号是主码,姓名取值唯一
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件*/
Sname CHAR(20) UNIQUE, /* Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
然后点击“分析查询”和“执行查询”。
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。
实验四 SQL语言的DDL
(一)实验内容
1.用如下语句对表进行操作:Create Table 建表;Drop Table 删除表;Alter Table 更改表。
CREATE TABLE Student
( Sno CHAR(4) PRIMARY KEY)
DROP TABLE Student /*当Student表与其他数据有级联关系或者其他关系时,不能删除。*/
ALTER TABLE Student ADD S_entrance DATE NULL/*向Student表增加“入学时间”列,其数据类型为日期型*/
ALTER TABLE Student DROP COLUMN Sno /*删除Student表中的Sno这一列,含有以下关系的列不能被删除:
· 被复制列。
· 用在索引中的列。
· 用在 CHECK、FOREIGN KEY、UNIQUE 或 PRIMARY KEY 约束中的列。
· 有相关联的默认值(由 DEFAULT 关键字定义)的列,或绑定到默认对象的列。
· 绑定到规则的列。 */
2.用如下语句对视图进行操作:Create View 建视图;Drop View 删除视图。
/*创建一个IS_Student视图,视图中返回来自于表Student中Sdept=’IS’的所有学生的Sno,Sname,Sage列*/
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS'
/*删除IS_Student视图*/
drop VIEW IS_Student
3.如下语句对索引进行操作:Create Index 建立索引;Drop Index 删除索引。
/*创建一个Stusname索引,在Student 表中以Sname列升序排列*/
CREATE CLUSTERED INDEX Stusname
ON Student(Sname)
/*删除Student表中的Stusname索引*/
DROP INDEX Student.Stusname
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。
实验五 SQL语言的DML
(一)实验内容
1.启动数据库服务软件SQL Server 2000的查询分析器,用INSERT语句对表进行插入操作。
/*将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中*/
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('200215128','陈冬','男','IS',18)
/*学生张成民的信息插入到Student表中*/
INSERT
INTO Student
VALUES ('200215126','张成民',18,'CS','男')
/*对表Student中每一个系,求学生的平均年龄,并把结果存入表Dept_age表中。*/
第一步:CREATE TABLE Dept_age
(Sdept CHAR(15), /* 系名*/
Avg_age SMALLINT) /*学生平均年龄*/
第二步:INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept
2.用UPDATE语句对表中已有的记录进行修改。
/*将学生200215121的年龄改为22岁*/
UPDATE Student
SET Sage=22
WHERE Sno='200215121'
/*将所有学生的年龄增加1岁*/
UPDATE Student
SET Sage= Sage+1
/*将CS系全体学生的成绩置零*/
UPDATE SC
SET Grade=0
WHERE 'CS'=(SELECT Sdept
FROM Student
WHERE Student.Sno = SC.Sno)
3.用DELETE语句对表中已有的记录进行删除。
/*删除学号为200215128的学生记录*/
DELETE
FROM Student
WHERE Sno= '200215128 '
/*删除所有的学生选课记录*/
DELETE
FROM SC
/*删除计算机科学系所有学生的选课记录*/
DELETE
FROM SC
WHERE 'CS'=(SELECT Sdept
FROM Student
WHERE Student.Sno=SC.Sno)
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。
实验六 DML的数据查询
(一)实验内容
1.启动数据库服务软件SQL Server 2000的查询分析器,用SELECT语句对表进行简单查询操作。
/*查询全体学生的学号与姓名。*/
SELECT Sno,Sname
FROM Student;
/*查询全体学生的详细记录。*/
SELECT *
FROM Student;
/*指定DISTINCT关键词,去掉表中重复的行 */
SELECT DISTINCT Sno
FROM SC
/*查询考试成绩有不及格的学生的学号*/
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60
/*查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄*/
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23
/*查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。*/
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ('IS','MA','CS' )
/*查询学号为200215121的学生的详细情况。*/
SELECT *
FROM Student
WHERE Sno LIKE '200215121'
/*查询选修1号课程的学生最高分数。*/
SELECT MAX(Grade)
FROM SC
WHERE Cno=‘1‘
2.用SELECT语句对表进行连接查询操作,连接查询涉及被连接和连接两个表。
等值连接:连接运算符为=
/*查询每个学生及其选修课程的情况*/
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno = SC.Sno
自然连接:
/*查询每个学生及其选修课程的情况*/
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno = SC.Sno
自身连接:
查询每一门课的间接先修课(即先修课的先修课)
SELECT FIRST.Cno,SECOND.Cpno
FROM Course FIRST,Course SECOND
WHERE FIRST.Cpno = SECOND.Cno
外连接:
/*查询每个学生及其选修课程的情况(包括Student表中不满足条件的元组)*/
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);
复合条件连接:WHERE子句中含多个连接条件:
/*查询每个学生的学号、姓名、选修的课程名及成绩*/
SELECT Student.Sno,Sname,Cname,Grade
FROM Student,SC,Course /*多表连接*/
WHERE Student.Sno = SC.Sno
and SC.Cno = Course.Cno
3.用SELECT语句对表进行嵌套查询操作。
带有IN谓词的子查询:
/*查询与“刘晨”在同一个系学习的学生。此查询要求可以分步来完成*/
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname='刘晨')
带有比较运算符的子查询
/*假设一个学生只可能在一个系学习,并且必须属于一个系,则在上例中可以用 = 代替IN*/
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept =( SELECT Sdept
FROM Student
WHERE Sname='刘晨')
带有ANY(SOME)或ALL谓词的子查询
/*查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄*/
SELECT Sname,Sage
FROM Student
WHERE Sage < ANY (SELECT Sage
FROM Student
WHERE Sdept= 'CS')
AND Sdept <> 'CS' /*父查询块中的条件 */
带有EXISTS谓词的子查询
查询没有选修1号课程的学生姓名。
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno = Student.Sno AND Cno ='1');
4.用SELECT语句对表进行组合查询操作。
/*查询计算机科学系的学生及年龄不大于19岁的学生。*/
SELECT *
FROM Student
WHERE Sdept= 'CS'
UNION /*UNION:将多个查询结果合并起来时,系统自动去掉重复元组。*/
SELECT *
FROM Student
WHERE Sage<=19;
/*查询计算机科学系的学生与年龄不大于19岁的学生的交集*/
SELECT *
FROM Student
WHERE Sdept='CS'
INTERSECT
SELECT *
FROM Student
WHERE Sage<=19
/*sql server 2000中没有INTERSECT的这样的用法*/
/*查询计算机科学系的学生与年龄不大于19岁的学生的差集。*/
SELECT *
FROM Student
WHERE Sdept='CS'
EXCEPT
SELECT *
FROM Student
WHERE Sage <=19
/*sql server 2000中没有EXCEPT的这样的用法*/.
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。
实验七 SQL语言的DCL
(一)实验内容
1.启动数据库服务软件SQL Server 2000的查询分析器,用GRANT语句对数据库存取权限进行授权操作。
/*把查询Student表权限授给用户U1*/
GRANT SELECT
ON Student
TO U1
/*把对Student表和Course表的全部权限授予用户U2和U3,但是在sql server 2000中不允许同时对多个表的授权语句*/
GRANT ALL PRIVILEGES
ON Student,Course
TO U2,U3;
/*把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户*/
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION
2.用REVOKE语句将DBA(数据库管理员)、DBO(建库用户)授与其它用户对数据库的操作权收回。
/*把用户U4修改学生学号的权限收回*/
REVOKE UPDATE(Sno)
ON Student
FROM U4;
/*收回所有用户对表SC的查询权限*/
REVOKE SELECT
ON SC
FROM PUBLIC;
/*把用户U5对SC表的INSERT权限收回*/
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。
实验八 SQL语言综合练习
(一)实验内容
1.启动数据库服务软件SQL Server 2000的查询分析器,用Create Table建表;
/*建立“学生”表Student,学号是主码,姓名取值唯一。*/
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件*/
Sname CHAR(20) UNIQUE, /* Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
2.用Insert Into向表中插入记录;
/*将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中*/
INSERT
INTO Student (Sno,Sname,Ssex,Sage,Sdept)
VALUES ('200215128','陈冬','男',18,'IS')
3.用Create Index在表上建立索引;
/*创建一个Stusname索引,在Student 表中以Sname列升序排列*/
CREATE CLUSTERED INDEX Stusname
ON Student(Sname)
/*删除Student表中的Stusname索引*/
4.用Create View建立视图;
/*创建一个IS_Student视图,视图中返回来自于表Student中Sdept=’IS’的所有学生的Sno,Sname,Sage列*/
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS'
5.用SELECT语句进行各种查询操作。
/*查询全体学生的学号与姓名。*/
SELECT Sno,Sname
FROM Student;
/*查询全体学生的详细记录。*/
SELECT *
FROM Student;
/*查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄*/
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23
/*查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。*/
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ('IS','MA','CS' )
*查询学号为200215121的学生的详细情况。*/
SELECT *
FROM Student
WHERE Sno LIKE '200215121'
(二)实验方式与分组要求
老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。
执笔:张平 审核:?
XXX大学实验报告课程名称数据库管理系统实验名称数据的查询专业班级姓名学号实验日期实验地点20xx20xx学年度第一学期第2页共7…
第1部分北京工业大学数据库实验报告存储过程和触发器姓名邱健康学号09521320专业电信第1部分错误使用开始选项卡将标题1应用于要…
数据库系统及应用实验报告设计课题SQL20xx数据库安装及数据库建立专业班级山东大学通信二班小组成员王指导教师设计时间20xx12…
数据库原理实验报告实验名称实验二使用SQL语句操作数据实验时间20xx416学生姓名班级一实验目的1熟悉SQLServer20xx…
课程设计大作业报告课程名称数据库原理与技术设计题目学生管理子系统院系计算机与网络技术系班级09级计科1班设计者学号20xx1101…
数据库原理实验报告实验名称实验二使用SQL语句操作数据实验时间20xx416学生姓名班级一实验目的1熟悉SQLServer20xx…
XXX大学实验报告课程名称数据库管理系统实验名称数据的查询专业班级姓名学号实验日期实验地点20xx20xx学年度第一学期第2页共7…
课程设计大作业报告课程名称数据库原理与技术设计题目学生管理子系统院系计算机与网络技术系班级09级计科1班设计者学号20xx1101…
实验一建立数据库班级:姓名:学号:分数:一、实验目的1、理解SQLServer数据库的存储结构;2、掌握SQLServer数据库的…