福建农林大学数据库实验报告.doc
. .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且成绩在8090分之间的学生学号、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李勇男20111011X晨女19 1012王敏女22121013X立男2113部门号部门名称11生产科56612方案科57813一车间46714科研所 2用Transact-SQL语句表示职工和部门之间的内连接、左外部连接和右外部连接,在职工部门库中实现其数据内连接和各种外查询操作。三、实验环境硬件:计算机软件:Windows 2000和SQL Server 2000 四、实验步骤及其结果:1.根本操作实验1简单查询实验l用Transact-SQL语句表示以下操作在学生选课库中实现其数据查询操作: 求数学系学生的学号和XX。select Sno,Snamefrom Studentwhere Sdept='MA'求选修了课程的学生学号。select distinct Snofrom SC;求选修C1课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩一样那么按学号升序排列。select Sno,Gradefrom SCwhere o='1' order by Grade desc,Sno asc;获选修课程C1且成绩在8090分之间的学生学号和成绩,并将成绩乘以系数0.8输出。select Sno,0.8*Gradefrom SCwhere o='1' and Grade between 80 and 90 ;求数学系或计算机系姓X的学生的信息。select Student.Sno,Sname,Ssex,Sage,Sdept,o,Gradefrom Student,SCwhere Student.Sno=SC.Sno and Sname like '%' and(Sdept='MA' or Sdept='CS');求缺少了成绩的学生的学号和课程号。select Sno,ofrom SCwhere 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,ofrom Student,SCwhere Student.Sno=SC.Sno;求学生的学号、选修的课程名及成绩。select Student.Sno,Sname,ame,Gradefrom Student,SC,Coursewhere Student.Sno=SC.Sno and Course.o=SC.o;求选修C1课程且成绩为90分以上的学生学号、XX及成绩。select Student.Sno,Sname,Gradefrom Student,SCwhere Student.Sno=SC.Sno and o='1' and Grade>90 ;查询每一门课的间接先行课即先行课的先行课。select first.o,second.Cpnofrom Course first,Course secondwhere first.Cpno=second.o;2.提高操作实验1按表1的格式,建立职工部门库和职工表、部门,并向表中输入数据。表1 职工和部门表数据职工表部门表职工号性别年龄部门1010李勇男20111011X晨女19 1012王敏女22121013X立男2113部门号部门名称11生产科56612方案科57813一车间46714科研所 2Transact-SQL语句表示职工和部门之间的内连接、左外部连接和右外部连接,在职工部门库中实现其数据内连接和各种外查询操作。部门号部门名称11生产科56612方案科57813一车间46714科研所1create 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_delon 读者 for deleteas print 已删除读者表中的数据2建立一个查询指定读者号的阅读信息的存储过程List_jy,输入参数为读者号,如果没有输入读者号,那么要输出提示信息。建立这个存储过程的语句如下所示。create procedure List_jy p_dzh char(5) = nullas if p_dzh is null beginprint 请输入一个读者号returnendelseselect 编号,书名,借阅时间from 读者,借阅,图书where 读者.编号=借阅.读者编号 and 借阅.书号=图书.书号and 读者.编号=p_dzh2.提高操作实验在学生-课程数据库中用Transact-SQL语句描述以下功能:1为学生表建立一个名TRI_INSERT的INSERT触发器。功能是当用户向学生表添加数据时,同时也把这些数据添加到stu表中。其中:学生表和表stu的构造一样。2为学生表建立一个名TRI_DELETE的DELETE触发器。功能是当用户从学生表删除数据时,同时把这些要删除的数据添加到stu表中。其中:表student和表stu的构造一样。3创立一查询存储过程,过程名称为P_CX。参数是学号,输出信息是指定学号所应的XX、课程名称、成绩。运行时假设没有指定学号,那么提示请输入学号;假设学号不存在那么提示学号不存在。4创立一统计存储过程,过程名称为P_CJTJ。参数是学号,输出信息是指定学号的XX、选课门数、平均分、总分、最高分、最低分。运行时假设没有指定学号,那么提示输入学号;假设学号不存在那么提示学号不存在。 5创立一个实现求1n所有数之和的存储过程, 过程名称为P_SUM。参数是n,输出是前n个之和。如:n=100,那么输出5050。 6创立一个求指定区间a,b的随机数的存储过程, 过程名称为P_RAND。参数据是a和ba<b,输出a到b之间的一个随机数。三、实验环境硬件:计算机软件:Windows 2000和SQL Server 2000四、算法描述及实验步骤1、根本操作实验1在读者表上建立一个DELETE类型的触发器lianxi_del2建立一个查询指定读者号的阅读信息的存储过程List_jy2. 提高操作实验在学生-课程数据库中用Transact-SQL语句描述以下功能:1为学生表建立一个名TRI_INSERT的INSERT触发器。功能是当用户向学生表添加数据时,同时也把这些数据添加到stu表中。其中:学生表和表stu的构造一样。CREATE TRIGGER TRI_INSERTON STUDENTFOR INSERTASINSERT INTO STUSELECT * FROM INSERTED2为学生表建立一个名TRI_DELETE的DELETE触发器。功能是当用户从学生表删除数据时,同时把这些要删除的数据添加到stu表中。其中:表student和表stu的构造一样。CREATE TRIGGER TRI_DELETEON STUDENTFOR DELETEASINSERT INTO STUSELECT * FROM DELETED3创立一查询存储过程,过程名称为P_CX。参数是学号,输出信息是指定学号所应的XX、课程名称、成绩。运行时假设没有指定学号,那么提示请输入学号;假设学号不存在那么提示学号不存在。create procedure P_CXsno char(10) =nullasif sno is nullbeginprint '请输入一个学号'returnendelse if(not exists(select * from student where sno=sno)print '学号不存在'elseselect sname,course.o,gradefrom student,course,scwhere student.sno=sc.sno and course.o=sc.o and student.sno=sno4创立一统计存储过程,过程名称为P_CJTJ。参数是学号,输出信息是指定学号的XX、选课门数、平均分、总分、最高分、最低分。运行时假设没有指定学号,那么提示输入学号;假设学号不存在那么提示学号不存在。create procedure P_CIJJsno char(10) =nullasif sno is nullbeginprint '请输入一个学号'returnendelse if(not exists(select * from student where sno=sno)print '学号不存在'elseselect sname,count(o) 门数,avg(grade) 平均分,sum(grade) 总分,max(grade) 最高分,min(grade) 最低分from sc,studentwhere student.sno=snogroup by sname5创立一个实现求1n所有数之和的存储过程, 过程名称为P_SUM。参数是n,输出是前n个之和。如:n=100,那么输出5050。create procedure P_SUMn int,sum int outputasdeclare i intset sum=0set i=0while(i<=n)beginset sum=sum+iset i=i+1end6创立一个求指定区间a,b的随机数的存储过程, 过程名称为P_RAND。参数据是a和ba<b,输出a到b之间的一个随机数。create procedure p_randa int,b int,c int outputasset c =cast(rand()*(b-a)+a as int)print '一个随机数' +str(c)五、调试过程1、在建立查询指定读者号的阅读信息的存储过程时出现如下错误 将每一行的语句都顶格写,命令成功生成。六、实验结果七、实验总结这次实验主要是让我们了解如何创立一个触发器,触发器在数据库中是如何作用的,如何创立存储过程,存储过程有什么用。通过认真完成每一道题目,知道了对一个表建立一个或多个触发器后,对表进展作用时,会激活相应的触发器,实现相应的触发作用;知道了通过建立存储过程,可以简化查找等操作功能,防止重复工作。. .word.