资源描述
. .
XX农林大学计算机与信息学院
实验报告
课程名称:
数据库原理及应用
姓 名:
系:
专 业:
计算机科学与技术
年 级:
学 号:
指导教师:
李金铭
职 称:
副教授
2021 年月日
实验目录:
实验编号
实验名称
成绩
1
数据库的定义实验
2
数据库的建立与维护实验
3
数据库的查询实验
4
数据库的视图操作实验
5
触发器、存储过程操作实验
总评
XX农林大学计算机与信息学院实验报告
实验名称:数据库的定义实验
一、实验目的和要求
〔1〕要求学生熟练掌握和使用 SQL、Transact-SQL、SQL Server企业管理器创立数据库、表、索引和修改表构造。
〔2〕学会使用SQL Server 查询分析器接收Transact-SQL语句和进展结果分析。
二、实验内容和原理
1.根本操作实验
〔1〕使用企业管理器按教材中的内容建立图书—读者数据库。
〔2〕在企业管理器中查看图书读者数据库的属性,并进展修改,使之符合要求。
〔3〕通过企业管理器,在建好的图书借阅数据库中建立图书、读者和借阅3个表,其构造为;
图书〔书号,类别,,作者,书名,定价〕;
读者〔编号,,单位,性别,〕;
借阅〔书号,读者编号,借阅日期〕
要求为属性选择适宜的数据类型,定义每个表的主码,是否允许空值和默认值等列级数据约束。
〔4〕在企业管理器中建立图书、读者和借阅3个表的表级约束:每个表的主码约束;借阅表与图书表间、借阅表与读者表之间的外码约束,要求按语义先确定外码约束表达式,再通过操作予以实现;实现借阅表的书号和读者编号的惟一性约束:实现读者性别只能是“男〞或“女〞的Check〔检查〕约束。
三、实验环境
硬件:计算机
软件:Windows 2000和SQL Server 2000
四、算法描述及实验步骤
l.通过企业管理器,建立图书借阅数据库
在数据库图标上右击,选择“新建数据库〞,输入“图书_读者〞,单击“确定〞按钮,关闭对话框。在企业管理器窗口中出现“图书-读者〞数据库标志,这说明建库工作已经完成。
2.在建好的图书借阅数据库中建立图书、读者和借阅3个表
(1)建立“图书〞表。
选中图书_读者数据库中的表文件夹,单由鼠标右键,在弹出的菜单中选择“新建表〞,如图2所示。
(2)输入构造
书号: char 长度 10,不允许空值。并设置为主键。
类别: char 长度 12,允许空值。
:varchar 长度 50,不允许空值。
varchar 长度 50,允许空值。
名称:varchar 长度 50,不允许空值。
定价:char 长度 10,允许空值。
建立表格如图3所示。
(3)建立“读者〞表和“借阅〞表。
与建立“图书〞表的形式一致,如表2。
(4) 输入构造
读者〔编号,,单位,性别,〕
借阅〔书号,读者编号,借阅日期〕
“读者〞表:
编号:char 长度 20,不允许空值。并设置为主键。
:varchar 长度 50,不允许空值。
单位:varchar 长度 50,不允许空值。
性别:char 长度 10,不允许空值。
:varchar 长度 50,不允许空值。
“借阅〞表:
书号:char 长度 10,不允许空值。
读者编号:char 长度 20,不允许空值。
借阅日期:datetime,不允许空值。
将“书号〞与“读者编号〞设置为主键。
3. 指出图书读者数据库各表的主码、外码和数据约束
在表“图书〞中把书号作为主键,步骤如下:
右击‘书号’,点击‘设置主键’,在图书中把‘读者编号’设置成主键,在借阅表中建立与图书,和读者的关系
在表“读者〞中对‘性别’进展check完毕
表“读者〞和表“借阅〞的设置主键和表“图书〞一样
表“图书〞的主码是书号,外码也是书号,数据约束是主码不能为空
表“读者〞的主码是编号,外码也是编号,数据约束是性别只能为男或女
表“借阅〞的主码是书号,外码是读者编号,数据约束是主码和外码不能为空
五、调试过程
Check约束语句错误,经调试成功
六、实验结果:
图1 在数据库弹出菜单中选择“新建数据库〞
图2建立表格
图3输入表构造
七、实验总结
通过此次实验,我掌握了建立一个数据库的方法,以及建立表和表之间的关系,对表中
的属性进展约束,书上的毕竟只是理论,掌握理论不一定会实践,实践会了才是真的会。
XX农林大学计算机与信息学院实验报告
实验名称:数据库的建立与维护实验
一、实验目的和要求
熟练掌握使用 SQL、Transact-SQL和SQL Server企业管理器向数据库输入数据、修改数据和删除数据的操作。
二、实验内容和原理
1. 根本操作实验
〔1〕通过企业管理器,在图书-读者数据库的图书、读者和借阅3个表中各输入5条记录。要求记录不仅满足数据约束要求,还要有表间关联的记录。
〔2〕通过企业管理器实现对图书-读者数据库的图书、读者和借阅3个表中数据的插入、删除和修改操作。
2. 提高操作实验
〔1〕通过查询分析器用SQL命令实现对学生-课程库的数据增加、数据删除和数据修改操作,要求学生、课程和选课表中各有5条以上的记录。
〔2〕通过查询分析器用SQL命令实现在读者表中增加“借书册数’字段,统计借书者在2005年~2007年间所借书的册数,并将结果送入读者表中的借书册数字段的操作。
〔3〕通过查询分析器用SQL命令为学生-课程库中的“课程〞表添加“学时〔短整型〕〞属性,并设置它的约束条件为大于0且小于等于150。
三、实验环境
硬件:计算机
软件:Windows 2000和SQL Server 2000
四、实验步骤及其结果
1. 以一条记录为例,写出用SQL表示的向图书表中插入、修改和删除数据的语句
〔1〕通过企业管理器,在图书借阅数据库的图书、读者和借阅3个表中各输入10条记录。
〔2〕通过企业管理器实现对图书借阅数据库的图书、读者和借阅3个表中数据的插入。删除和修改操作。
删除:选择要删除的数据,右击选择‘删除’
插入:在最后一行‘NULL’中可以填写要插入的信息。
修改:选择要修改的数据直接修改。
〔3〕向自设计的数据库应用系统的库中的各表,输入多条实际数据,并实现数据的增、删、改操作。
五、调试过程
增加操作:
修改操作:
Course表:
原表:
修改后:
Student表:
原表:
修改后:
SC表:
原表:
修改后:
删除操作:
Course表:
原表:
删除后:
Student表:
原表:
删除后:
SC表:
原表:
删除后:
六、实验结果
2.实现在读者表中增加“借书册数’字段,统计借书者在1998年~1999年间所借书的册数,并将结果送入读者表中的借书册数字段的操作。
结果:
七、实验总结
通过本次实验,我了解了SQL语言对表格进展查询、行插入、删除和修改的编程。这次实验让我了解了更多关于数据库实际使用方法,也让我对数据库的了解更深入。
XX农林大学计算机与信息学院实验报告
实验名称:数据库的查询实验
一、实验目的和要求
〔1〕掌握SQL Server查询分析器的使用方法,加深对SQL和Transact-SQL语言的查询语句的理解。
〔2〕熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法。
〔3〕熟练掌握数据查询中的分组、统计、计算和组合的操作方法。
二、实验内容和原理
1.根本操作实验
用Transact-SQL语句表示以下操作.在学生-课程库中实现其数据查询操作:
〔1〕求数学系学生的学号和XX。
〔2〕求选修了高等数学的学生学号、XX和成绩。
〔3〕求选修C1课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩一样那么按学号升序排列。
〔4〕获选修课程C1且成绩在80~90分之间的学生学号、XX及成绩,并将成绩乘以系数0.8输出。
〔5〕求数学系或计算机系姓X的学生的信息。
〔6〕求缺少了成绩的学生的学号和课程号。
〔7〕求C1课程的成绩高于X三的学生学号和成绩。
〔8〕求其他系中比计算机系学生年龄都小的学生。
〔9〕查询选修了全部课程的学生的XX。
〔10〕求至少选修了学生“X三〞所选修的全部课程的学生学号和XX。
〔11〕查询每一门课的间接先行课〔即先行课的先行课〕。
在图书-图书库中实现其查询操作。
〔1〕查找这样的图书类别:要求类别中最高的图书定价不低于全部按类别分组的图书平均定价的2倍。
〔2〕求机械工业出版的各类图书的平均定价,用GROUPBY表示。
〔3〕列出计算机类图书的书号、名称及价格,最后求出册数和总价格。
〔4〕列出计算机类图书的书号、名称及价格,并求出各这类书的总价格,最后求出全部册数和总价格。
〔5〕查询计算机类和机械工业出版的图书。
〔6〕在图书-借阅库中实现其查询操作:将计算机类的书存入永久的计算机图书表中,将借书日期在1999年以前的借阅记录存入临时的超期借阅表。
用Transact-SQL语句表示,并在学生选课库中实现以下数据连接查询操作:
2.提高操作实验
〔1〕按表1的格式,建立职工部门库和职工表、部门,并向表中输入数据。
表1 职工和部门表数据
职工表部门表
职工号
性别
年龄
部门
1010
李勇
男
20
11
1011
X晨
女
19
1012
王敏
女
22
12
1013
X立
男
21
13
部门号
部门名称
11
生产科
566
12
方案科
578
13
一车间
467
14
科研所
〔2〕用Transact-SQL语句表示职工和部门之间的内连接、左外部连接和右外部连接,在职工部门库中实现其数据内连接和各种外查询操作。
三、实验环境
硬件:计算机
软件:Windows 2000和SQL Server 2000
四、实验步骤及其结果:
1.根本操作实验
〔1〕简单查询实验
〔l〕用Transact-SQL语句表示以下操作.在学生选课库中实现其数据查询操作:
求数学系学生的学号和XX。
select Sno,Sname
from Student
where Sdept='MA';
求选修了课程的学生学号。
select distinct Sno
from SC;
求选修C1课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩一样那么按学号升序排列。
select Sno,Grade
from SC
where o='1'
order by Grade desc,Sno asc;
获选修课程C1且成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出。
select Sno,0.8*Grade
from SC
where o='1' and Grade between 80 and 90 ;
求数学系或计算机系姓X的学生的信息。
select Student.Sno,Sname,Ssex,Sage,Sdept,o,Grade
from Student,SC
where Student.Sno=SC.Sno and Sname like '%' and(Sdept='MA' or Sdept='CS');
求缺少了成绩的学生的学号和课程号。
select Sno,o
from SC
where Grade=0;
2〕在图书借阅库中实现其查询操作:将计算机类的书存入永久的计算机图书表中,将借书日期在1999年以前的借阅记录存入临时的超期借阅表。
select *
into 计算机图书
from 图书
where 类别='计算机';
select *
into #超期借阅
from 借阅
where 借阅日期< '1999.01.01';
〔2〕连接查询实验
用Transact-SQL语句表示,并在学生选课库中实现以下数据连接查询操作:
查询每个学生的情况以及他〔她〕所选修的课程。
select Student.Sno,Sname,Ssex,Sage,Sdept,o
from Student,SC
where Student.Sno=SC.Sno;
求学生的学号、、选修的课程名及成绩。
select Student.Sno,Sname,ame,Grade
from Student,SC,Course
where Student.Sno=SC.Sno and Course.o=SC.o;
求选修C1课程且成绩为90分以上的学生学号、XX及成绩。
select Student.Sno,Sname,Grade
from Student,SC
where Student.Sno=SC.Sno and o='1' and Grade>90 ;
查询每一门课的间接先行课〔即先行课的先行课〕。
select first.o,second.Cpno
from Course first,Course second
where first.Cpno=second.o;
2.提高操作实验
〔1〕按表1的格式,建立职工部门库和职工表、部门,并向表中输入数据。
表1 职工和部门表数据
职工表部门表
职工号
性别
年龄
部门
1010
李勇
男
20
11
1011
X晨
女
19
1012
王敏
女
22
12
1013
X立
男
21
13
部门号
部门名称
11
生产科
566
12
方案科
578
13
一车间
467
14
科研所
〔2〕Transact-SQL语句表示职工和部门之间的内连接、左外部连接和右外部连接,在职工部门库中实现其数据内连接和各种外查询操作。
部门号
部门名称
11
生产科
566
12
方案科
578
13
一车间
467
14
科研所
〔1〕
create table 职工
(职工号 char(4) primary key,
varchar(max),
性别 char(2),
年龄 smallint,
部门 varchar(max));
create table 部门
(部门号 char(4) primary key,
部门名称 varchar(max),
varchar(max));
〔2〕外连接:
左连接:
\
右连接:
use 职工部门
select *
from 职工
right join 部门 on 职工.职工号=部门.部门号;
五、调试过程
use 职工部门
select *
from 职工
right join 部门 on 职工.职工号=部门.部门号;
没有加;号出错,改正成功
六、实验结果
七、实验总结
本次实验,通过用SQL语言对表进展查询操作,让我更加熟练地掌握SQL的编程方法,了解到了平时我们在文件查找数据与通过数据库的查询语句进展查询的不同,让我更加认同了数据库这类软件。
XX农林大学计算机与信息学院实验报告
实验名称:数据库的视图操作实验
一、实验目的和要求
〔1〕掌握 SQL Server中的视图创立向导和图表创立向导的使用方法;
〔2〕加深对视图和SQL Server图表作用的理解。
〔3〕掌握数据库平安性的操作方法。
二、实验内容和原理
1.根本操作实验
〔1〕在SQL Server企业管理器中调出Create View Wizard〔创立图表向导〕,按以下Transact-SQL描述的视图定义,创立借阅_计算机图书视图。
CREATE VIEW 借阅_计算机图书
AS SELECT 图书.*,借阅.*
FROM 图书,借阅
WHERE图书.编号=借阅.书号AND图书.类别=‘计算机’
〔2〕在SQL server企业管理器中调出Create View Wizard〔创立图表向导〕,完成在图书-读者数据库中建立一个图书_借阅图表操作。要求该图表包括图书和借阅两个表,并包括图书与借阅之间的“图书.书号=借阅.书号〞外码与被参照表之间的关联。
〔3〕查看上述实验结果。如果结果有误,予以纠正。
2.提高操作实验
在学生-课程数据库中用Transact-SQL语句描述以下视图定义。
〔1〕从学生表中建立查询所有男〔女〕生信息的视图STU_SEX。视图的列名为SNO、SNAME、SSEX和SAGE。
〔2〕从课程表中建立查询所有课程先修课信息的视图课程_PRE。视图的列名为课程号、课程名称和先修课名称。
〔3〕从选修表中建立查询成绩大于等于80信息的视图STU_CJ1。视图的列名为学号、课程号和成绩。
〔4〕从学生、选修和课程三个表建立查询学生选修情况的视图STU_CJ2。视图的列名为XX、课程名称和成绩。
〔5〕从学生、选修和课程三个表建立查询学生选修情况并且成绩小于80的视图STU_CJ3。视图的列名为XX、课程名称和成绩。
〔6〕利用Transact-SQL命令修改视图STU_SEX。把视图的列名改为学号、、性别和年龄,把加上“WITH CHECK OPTION〞选项。
〔7〕删除视图STU_CJ3。
三、实验环境
硬件:计算机
软件:Windows 2000和SQL Server 2000
四、实验步骤及其结果:
1.根本操作实验
〔1〕在SQL Server企业管理器中调出Create View Wizard〔创立图表向导〕,按以下Transact-SQL描述的视图定义,创立借阅_计算机图书视图。
CREATE VIEW 借阅_计算机图书
AS SELECT 图书.*,借阅.*
FROM 图书,借阅
WHERE图书.编号=借阅.书号AND图书.类别=‘计算机’
〔2〕在SQL server企业管理器中调出Create View Wizard〔创立图表向导〕,完成在图书_读者数据库中建立一个图书_借阅图表操作。要求该图表包括图书和借阅两个表,并包括图书与借阅之间的“图书.书号=借阅.书号〞外码与被参照表之间的关联。
〔3〕查看上述实验结果。如果结果有误,予以纠正。
2.提高操作实验
将自设计的数据库应用工程中的子模式,用Transact-SQL语句描述其视图定义并在SQLServer企业管理器中,用视图创立向导创立这些视图。
〔1〕下面用SQL语言创立借阅_计算机图书视图:
五、调试过程
在建立视图课程_PRE时,命令能够成功完成,但是查询结果中先修课名称为空,检查SQL命令语句
,先修课参照课程号,应对COURSE定义别名,修改命令语句后,输出结果正确。
六、实验结果
七、实验总结
通过这次实的创立视图以及视图的定义,让我了解到了视图表使我们更加容易直观得到我们想要的信息组合,而又不变动原来的数据。通过对视图的操作,了解到其实视图并不是那么难,与根本表的操作差不多。只是他们的的属性不同:视图是X虚表,而根本表是实实在在存在的表。这次实验学习到了视图的重要性。
XX农林大学计算机与信息学院实验报告
实验名称:触发器、存储过程操作实验
一、实验目的和要求
〔1〕掌握 SQL Server中的触发器的使用方法;
〔2〕掌握存储过程的操作方法。
二、实验内容和原理
1.根本操作实验
在读者-图书数据库中用Transact-SQL语句描述以下功能:
〔1〕在读者表上建立一个DELETE类型的触发器lianxi_del,触发动作是显示信息〔已删除读者表中的数据〕,执行以下语句:
create trigger lianxi_del
on 读者
for delete
as print ‘已删除读者表中的数据’
〔2〕建立一个查询指定读者号的阅读信息的存储过程List_jy,输入参数为读者号,如果没有输入读者号,那么要输出提示信息。建立这个存储过程的语句如下所示。
create procedure List_jy
p_dzh char(5) = null
as
if p_dzh is null
begin
print ‘请输入一个读者号’
return
end
else
select 编号,,书名,借阅时间
from 读者,借阅,图书
where 读者.编号=借阅.读者编号 and 借阅.书号=图书.书号
and 读者.编号=p_dzh
2.提高操作实验
在学生-课程数据库中用Transact-SQL语句描述以下功能:
〔1〕为学生表建立一个名TRI_INSERT的INSERT触发器。功能是当用户向学生表添加数据时,同时也把这些数据添加到stu表中。其中:学生表和表stu的构造一样。
〔2〕为学生表建立一个名TRI_DELETE的DELETE触发器。功能是当用户从学生表删除数据时,同时把这些要删除的数据添加到stu表中。其中:表student和表stu的构造一样。
〔3〕创立一查询存储过程,过程名称为P_CX。参数是学号,输出信息是指定学号所应的XX、课程名称、成绩。运行时假设没有指定学号,那么提示请输入学号;假设学号不存在那么提示学号不存在。
〔4〕创立一统计存储过程,过程名称为P_CJTJ。参数是学号,输出信息是指定学号的XX、选课门数、平均分、总分、最高分、最低分。运行时假设没有指定学号,那么提示输入学号;假设学号不存在那么提示学号不存在。
〔5〕创立一个实现求1—n所有数之和的存储过程, 过程名称为P_SUM。参数是n,输出是前n个之和。如:n=100,那么输出5050。
〔6〕创立一个求指定区间[a,b]的随机数的存储过程, 过程名称为P_RAND。参数据是a和b〔a<b〕,输出a到b之间的一个随机数。
三、实验环境
硬件:计算机
软件:Windows 2000和SQL Server 2000
四、算法描述及实验步骤
1、根本操作实验
〔1〕在读者表上建立一个DELETE类型的触发器lianxi_del
〔2〕建立一个查询指定读者号的阅读信息的存储过程List_jy
2. 提高操作实验
在学生-课程数据库中用Transact-SQL语句描述以下功能:
1〕为学生表建立一个名TRI_INSERT的INSERT触发器。功能是当用户向学生表添加数据时,同时也把这些数据添加到stu表中。其中:学生表和表stu的构造一样。
CREATE TRIGGER TRI_INSERT
ON STUDENT
FOR INSERT
AS
INSERT INTO STU
SELECT * FROM INSERTED
〔2〕为学生表建立一个名TRI_DELETE的DELETE触发器。功能是当用户从学生表删除数据时,同时把这些要删除的数据添加到stu表中。其中:表student和表stu的构造一样。
CREATE TRIGGER TRI_DELETE
ON STUDENT
FOR DELETE
AS
INSERT INTO STU
SELECT * FROM DELETED
〔3〕创立一查询存储过程,过程名称为P_CX。参数是学号,输出信息是指定学号所应的XX、课程名称、成绩。运行时假设没有指定学号,那么提示请输入学号;假设学号不存在那么提示学号不存在。
create procedure P_CX
sno char(10) =null
as
if sno is null
begin
print '请输入一个学号'
return
end
else if(not exists
(select * from student where sno=sno))
print '学号不存在'
else
select sname,course.o,grade
from student,course,sc
where student.sno=sc.sno and course.o=sc.o and student.sno=sno
〔4〕创立一统计存储过程,过程名称为P_CJTJ。参数是学号,输出信息是指定学号的XX、选课门数、平均分、总分、最高分、最低分。运行时假设没有指定学号,那么提示输入学号;假设学号不存在那么提示学号不存在。
create procedure P_CIJJ
sno char(10) =null
as
if sno is null
begin
print '请输入一个学号'
return
end
else if(not exists
(select * from student where sno=sno))
print '学号不存在'
else
select sname,count(o) 门数,avg(grade) 平均分,sum(grade) 总分,max(grade) 最高分,min(grade) 最低分
from sc,student
where student.sno=sno
group by sname
〔5〕创立一个实现求1—n所有数之和的存储过程, 过程名称为P_SUM。参数是n,输出是前n个之和。如:n=100,那么输出5050。
create procedure P_SUM
n int,
sum int output
as
declare i int
set sum=0
set i=0
while(i<=n)
begin
set sum=sum+i
set i=i+1
end
〔6〕创立一个求指定区间[a,b]的随机数的存储过程, 过程名称为P_RAND。参数据是a和b〔a<b〕,输出a到b之间的一个随机数。
create procedure p_rand
a int,
b int,
c int output
as
set c =cast((rand()*(b-a))+a as int)
print '一个随机数' +str(c)
五、调试过程
1、在建立查询指定读者号的阅读信息的存储过程时出现如下错误
将每一行的语句都顶格写,命令成功生成。
六、实验结果
七、实验总结
这次实验主要是让我们了解如何创立一个触发器,触发器在数据库中是如何作用的,如何创立存储过程,存储过程有什么用。通过认真完成每一道题目,知道了对一个表建立一个或多个触发器后,对表进展作用时,会激活相应的触发器,实现相应的触发作用;知道了通过建立存储过程,可以简化查找等操作功能,防止重复工作。
. .word..
展开阅读全文