数据库实验报告.docx
《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(51页珍藏版)》请在冰豆网上搜索。
![数据库实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/10/1d49fdf8-410f-49d5-97f9-336814d9f820/1d49fdf8-410f-49d5-97f9-336814d9f8201.gif)
数据库实验报告
数据库原理
实验报告
学号:
姓名:
提交日期:
成绩:
【实验内容】
实验一数据库的创建与管理
实验内容:
1、分别使用上述方法启动sqlserver的服务。
2、在企业管理器中创建一个数据库,要求如下:
(1)数据库名称Test1。
(2)主要数据文件:
逻辑文件名为Test1_data1,物理文件名为Test1_data1.mdf,初始容量为1MB,最大容量为10MB,增幅为1MB。
(3)次要数据文件:
逻辑文件名为Test1_data2,物理文件名为Test1_data2.ndf,初始容量为1MB,最大容量为10MB,增幅为1MB。
(4)事务日志文件:
逻辑文件名为Test1_log1,物理文件名为Test1_log1.ldf,初始容量为1MB,最大容量为5MB,增幅为512KB。
3、在查询分析器中创建一个数据库,要求如下:
(1)数据库名称Test2。
(2)主要数据文件:
逻辑文件名为Test2_data1,物理文件名为Test2_data1.mdf,初始容量为1MB,最大容量为10MB,增幅为1MB。
(3)次要数据文件:
逻辑文件名为Test2_data2,物理文件名为Test2_data2.ndf,初始容量为1MB,最大容量为10MB,增幅为1MB。
(4)事务日志文件:
逻辑文件名为Test2_log1,物理文件名为Test2_log1.ldf,初始容量为1MB,最大容量为5MB,增幅为1MB。
代码如下:
createdatabaseTest2
onprimary(name=Test2_data1,
filename='d:
\sqlex\Test2_data1.mdf',
size=1,
maxsize=10,
filegrowth=1),
(name=Test2_data2,
filename='d:
\sqlex\Test2_data2.ndf',
size=1,
maxsize=10,
filegrowth=1)
logon(name=Test2_log1,
filename='d:
\sqlex\Test2_log1.ldf',
size=1,
maxsize=5,
filegrowth=1)
4、在查询分析器中按照下列要求修改第3题中创建的数据库test2
(1)主要数据文件的容量为2MB,最大容量为20MB,增幅为2MB。
(2)次要数据文件的容量为2MB,最大容量为20MB,增幅为2MB。
(3)事务日志文件的容量为1MB,最大容量为10MB,增幅为2MB。
5、数据库更名:
把test1数据库更名为new_test1
6、在企业管理器中删除new_test1数据库,在查询分析器中删除test2数据库。
语句为:
Dropdatabasenew_test2
7、为sql示例数据库northwind创建一个备份:
northwindBK,并使用该备份文件恢复northwind数据库。
8、使用sql示例数据库pubs完成数据库的分离和附加操作。
实验二创建并管理表
二、创建并管理表
1、创建数据库studentInfo,包含如下表,创建这些表并按要求定义约束:
表2.1students(学生表)结构
字段名
说明
数据类型
约束说明
Student_id
学号
字符串,长
为10
主键
Student_name
姓名
字
串,长度为10
非空
sex
性别
字符串,长度为1
非空值,取‘F’或‘M’
age
年龄
整数
允许空值
department
所在系名
字符串,长度为15
默认值为‘电子信息系’
表2.2course(课程表)结构
字段名
说明
数据类型
约束说明
Course_id
课程号
字符串,长度为6
主键
Course_name
课程名
字符串,长度为20
非空值
PreCouId
先修课程号
字符串,长度为6
允许空值
C
edits
学分
十进制数,精度3,小数位1
非空值
表2.3score(选课表)结构
字段名
说明
数据类型
约束说明
Student_id
学号
字符串,长度为10
外键,参照student的主键
Course_id
课程号
字符串,长度为6
外键,参照student的主键
Grade
成绩
十进制数,精度3,小数位1
允许空值
联合主键:
(Student_id,Course_id)
以下为各个表的数据;
students表数据
Student_id
Student_name
ex
age
department
20010101
Jone
M
19
Computer
20010102
Sue
F
20
Computer
20010103
Smith
M
19
Math
20030101
Allen
M
18
Automation
20030102
deepa
F
21
Art
course表数据
Course_id
Course_name
PreCouId
Credits
C1
English
4
C2
Math
C5
2
C3
database
C2
2
score表数据
Student_id
Course_id
Grade
20010101
C1
90
20010102
C2
94
20010103
C1
88
建立好后,表格显示如下:
student表:
course表:
score表:
2、增加、修改、删除字段,要求:
1为表student增加一个memo(备注)字段,类型为varchar(200)。
2将memo字段的数据类型更改为varchar(300)。
3删除memo字段
3、向表中插入数据验证约束
useStudentInfo
go
altertablescore
addconstraintchkGradecheck(grade>0andgrade<100)
altertablestudent
addconstraintchkSexcheck(sexin('m','f'))
4、分别使用企业管理器和查询分析器删除表
usestudentInfo
go
droptablescore
实验三数据更新
实验内容:
1、向students表添加一个学生记录,学号为20010112,性别为男,姓名为stefen,年龄25岁,所在系为艺术系art。
2、向score表添加一个选课记录,学生学号为20010112,所选课程号为C2。
3、建立临时表tempstudent,结构与students结构相同,其记录均从student表获取
createtabletempstudent(student_idchar,student_namechar,sexchar,ageint,departmentchar)
insertintotempstudent
selectstudent_id,student_name,sex,age,department
fromstudent
groupbystudent_id,student_name,sex,age,department
4、将所有学生的成绩加5分
useStudentInfo
go
updatescore
setgrade=grade+5
5、将姓名为sue的学生所在系改为电子信息系
useStudentInfo
go
updatestudent
setdepartment='电子信息系'
wherestudent_name='sue'
6、将选课为database的学生成绩加10分
useStudentInfo
go
updatescore
setgrade=grade+10
wherecourse_id='C3'
7、删除所有成绩为空的选修记录
useStudentInfo
go
deletescorewheregrade=NULL
8、删除学生姓名为deepa的学生记录
useStudentInfo
go
deletestudentwhereStudent_name='deepa'
9、删除计算机系选修成绩不及格的学生的选修记录。
查询分析器中进行删除:
代码如下:
deletestudent
innerjoinscore
onstudent.student_id=score.student.id
wheredepartment=’computer’andgrade<60
实验四数据查询
实验内容:
在已经建立好的studentInfo数据库中使用已存在的3个数据表student、course、score基础上完成下列查询实验:
一、简单查询实验
1、查询全体学生的学号、姓名、所在系,并为结果集的各列设置中文名称
代码:
select学号=student_id,
学生姓名=student_name,
所在系=department,
fromstudent
2、查询全体学生的选课情况,并为所有成绩加5分。
select*
fromscore
whereGrade=Grade+5
3、显示所有选课学生的学号,去掉重复行。
selectdistinct
Student_id
fromscore
4、查询选课成绩大于80分的学生。
selectStudent_id
fromscore
whereGrade>80
5、查询年龄在20到30之间的学生学号,姓名,所在系
6、查询数学系、电子信息系、艺术系的学生学号,姓名
7、查询姓名第二个字符为u并且只有3个字符的学生学号,姓名
8、查询所有以S开头的学生。
9、查询姓名不以S、D、或J开头的学生
10、查询没有考试成绩的学生和相应课程号(成绩值为空)
11、求年龄大于19岁的学生的总人数
12、分别求选修了数学课程的学生平均成绩、最高分、最低分学生。
13、求学号为20010103的学生总成绩
14、求每个选课学生的学号,姓名,总成绩
15、查询所有S开头且全名为3个字母的学生姓名,学号,性别
16、求课程号及相应课程的所有的选课人数
17、查询选修了3门以上课程的学生姓名学号
二、多表连接查询
1、查询每个学生基本信息及选课情况
2、查询每个学生学号姓名及选修的课程名、成绩
3、求电子信息系选修课程>=1门课的学生学号姓名、平均成绩并按平均成绩降序排列
4、查询与sue在同一个系学习的所有学生的学号姓名
查询所有学生的选课情况,要求包括所有选修了课程的学生和没有选课的学生,显示他们的姓名学号课程号和成绩(如果有)
五索引和视图
1、分别使用企业管理器和查询分析器为northwind数据库中products表建立一个聚集索引,索引字段为产品类型和产品编号。
2、查询分析器中使用表categories和products创建视图对象view_cate_prod,查询每种类型的产品总库存(库存为products表中unitinstock列)。
3、在已经建立的studentInfo数据库的3个表基础上,完成下列操作:
(1)建立数学系的学生视图;
(2)建立计算机系选修了课程名为database的学生的视图,视图名为compStudentview,该视图的列名为学号、姓名、成绩
(3)创建一个名为studentSumview的视图,包含所有学生学号和总成绩
(4)建立一个计算机系学生选修了课程名为database并且成绩大于80分的学生视图,视图名为CompsutdentView1,视图的列为学号姓名成绩。
(5)使用sql语句删除compsutdentview1视图。
语句为:
DropviewCompsutdentView1
实验六存储过程和触发器
实验内容:
1、创建针对northwind数据库表customers进行插入、修改和删除的三个存储过程:
insertCustomers、updateCustomers和deleteCustomers
2、创建一个存储过程,要求设置参数@fname表示作者的姓,@lname表示作者的名,从系统示例数据库pubs中的titles、authors和titleauthors表中查询作者以及作者出版的书的信息。
(要求输入作者的姓和名,如果存在,则返回查询结果,否则给出相应的提示信息)
3、使用sql语句创建一个DELETE触发器,完成如下功能:
在northwind数据库中,当删除categories表中的记录时,检测products表中是否存在相关记录,如果存在,则给出提示信息“不能删除该条记录!
”;如果不存在则删除该条记录。