数据库实验报告.docx
《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(11页珍藏版)》请在冰点文库上搜索。
数据库实验报告
数据库实验报告
学院计算机科学与技术
班级计科1205班
姓名刘贵亮
学号U201214926
指导老师胡侃
日期2015.06.14
目录
一、实验目的4
二、实验原理4
1.DDL使用方法4
2.DML使用方法4
三、实验内容5
1.基本表的创建与数据的插入5
2.数据查询7
3.数据修改、删除7
4.视图的操作7
5.库函数,授权的控制7
6.数据库的备份和恢复7
四、实验结果及代码7
1.基本表的创建与数据插入7
2.数据查询8
3.数据修改、删除9
4.视图的操作10
5.库函数,授权的控制10
6.数据库的备份恢复11
五、实验心得体会12
一、
实验目的
掌握SQL Server 2000 的工具使用
掌握DDL的使用方法
掌握DML的使用方法
掌握SELECT命令 使用方法
掌握DCL的使用方法
掌握数据库的备份和恢复
二、实验原理
1.DDL使用方法
(1)数据库的创建
在查询分析器中执行下列语句即可在默认的设备上创建新的数据库sch。
CREATE DATABASE database_name 。
(2)基本表的建立
创建基本表的命令为:
CREATE TABLE table_name。
创建基本表时,应先选择包含表的数据库。
(3)视图的建立
视图是组成数据库体系结构——三级模式两级映像结构中的外模式的基本单元,SQL-Server的视图定义命令为:
CREATEVIEWview-nameASSELECTstatement。
视图是用于定义终端用户数据来源的。
在视图定义中可以使用复杂的SELECT命令。
2.DML使用方法
SQL的DML包括插入(INSERT)、删除(DELETE)、修改(UPDATE)等命令。
DML命令的执行是可能造成数据库不一致的根源。
(1)INSERT命令
SQL语言的插入命令:
INSERTINTOtable-name(column-list)VALUES(values-list),可以完成数据输入功能。
(2)DELETE命令
SQL的删除命令为:
DELETEFROMtable-name[WHEREcondition-expression];执行DELETE命令后,系统会删除满足命令中条件表达式的所有元组。
这种删除只是逻辑的。
因此,当再次插入一个与被删除的元组具有相同关键字的元组时,被认为违反了实体完整性。
(3)UPDATA命令
SQL的修改命令为:
UPDATE table-name
SET column-name = expression [WHERE condition-expression];
执行UPDATE命令后,系统会按照SET子句修改满足命令中条件表达式的所有元组。
如果使用修改命令更新关键字的值,而该关键字在其他表中作为外码存在时,操作可能违反参照完整性。
系统将拒绝执行。
(4)SELECT命令
SELECT 命令是SQL语言中使用最频繁的命令,其变化形式繁多,灵活运用SELECT 命令可以完成任意复杂的查询要求。
SELECT 命令的基本语法为:
SELECT query_expression|column-list|* FROM table_name_list|view_name_list [WHERE condition-expression]
[GROUP BY [HAVING condition-expression]]
[ORDER BY order_expression| column [ASC|DESC]][,…n];
三、实验内容
1.基本表的创建与数据的插入
(1)创建教学管理中的三个基本表:
Students(S#,SNAME,AGE,SEX) 学生(学号,姓名,年龄,性别)
Courses(C#,CNAME,SCORE,PC#)课程(课程号,课程名,学分,先行课号)
SC(S#,C#,GRADE) 选修(学号,课程号,成绩)
(2)用INSERT命令输入数据
S1
LU
20
M
S2
YIN
19
M
S3
XU
18
F
S4
QU
14
F
S5
PAN
14
M
S6
DONG
24
M
表格1基本表students的数据
C1
数学
4
M
C2
英语
8
M
C3
数据结构
4
F
C4
数据库
3.5
F
C5
网络
4
M
表格2基本表courses的数据
C#
S1
S2
S3
S4
S6
S8
C1
85
90
89
84
88
87
C2
73
NULL
86
82
75
85
C3
88
80
90
NULL
C4
89
85
NULL
92
88
C5
73
NULL
87
表格3基本表SC的数据(空格为未选修)
2.数据查询
(1)列出选修课程号为C2的学生学号与姓名。
(2)检索选修课程名为“数学”的学生学号与姓名。
(3)检索没有选修C2课程的学生姓名与年龄。
(4)检索选修全部课程的学生姓名。
3.数据修改、删除
(1)把C2课程的非空成绩提高10%。
(2)在SC表中删除课程名为“物理”的成绩所对应的元组。
(3)在S和SC表中删除学号为S8的所有数据。
4.视图的操作
(1)建立男生学生的视图,属性包括学号,姓名,选修课程名和成绩。
(2)在男生视图中查询平均成绩大于80分的学生学号和姓名。
5.库函数,授权的控制
(1)计算每个学生选修课程的门数、平均成绩。
(2)建立一个合法的用户,将SC表的查询权限授予该用户。
(3)使用GRANT语句,把对基本表students、Courses、SC的使用权限授予其他用户。
6.数据库的备份和恢复
(1)使用完全备份将你的实验数据库备份到软盘。
(2)删除你所建立的数据库。
(3)恢复你的数据库。
(4)在恢复后的数据库上撤销你建立的基本表和视图。
四、实验结果及代码
1.基本表的创建与数据插入
createtablestudents(schar(9)primarykey,snamechar(20)notnull,agechar(3),sexchar(6));
createtablecourses(cchar(9)primarykey,cnamechar(20)notnull,scoreint,pcchar(3));
createtablesc(schar(9)foreignkeyreferencesstudents(s),cnochar(9),gradeint,foreignkey(c)referencescourses(c));
insertintostudentsvalues('S1','LU',20,'M');
insertintostudentsvalues('S2','YIN',19,'M');
insertintostudentsvalues('S3','XU',18,'F');
insertintostudentsvalues('S4','QU',18,'F');
insertintostudentsvalues('S6','PAN',14,'M');
insertintostudentsvalues('S8','DONG',24,'M');
insertintoCoursesvalues('C1','数学',4,'M');
insertintoCoursesvalues('C2','英语',8,'M');
insertintoCoursesvalues('C3','数据结构',4,'F');
insertintoCoursesvalues('C4','数据库',3.5,'F');
insertintoCoursesvalues('C5','网络',4,'M');
insertintoSCvalues('S1','C1',85);
insertintoSCvalues('S2','C1',90);
insertintoSCvalues('S3','C1',89);
insertintoSCvalues('S4','C1',84);
insertintoSCvalues('S6','C1',88);
insertintoSCvalues('S8','C1',87);
insertintoSCvalues('S1','C2',73);
insertintoSCvalues('S2','C2',NULL);
insertintoSCvalues('S3','C2',86);
insertintoSCvalues('S4','C2',82);
insertintoSCvalues('S6','C2',75);
insertintoSCvalues('S8','C2',85);
insertintoSCvalues('S1','C3',88);
insertintoSCvalues('S2','C3',80);
insertintoSCvalues('S6','C3',90);
insertintoSCvalues('S8','C3',NULL);
insertintoSCvalues('S1','C4',89);
insertintoSCvalues('S2','C4',85);
insertintoSCvalues('S4','C4',NULL);
insertintoSCvalues('S6','C4',92);
insertintoSCvalues('S8','C4',88);
insertintoSCvalues('S1','C5',73);
insertintoSCvalues('S2','C5',NULL);
insertintoSCvalues('S8','C5',87);
2.数据查询
(1)列出选修课程号为C2的学生学号与姓名。
代码:
selectsc.s,snamefromstudents,scwhereo='C2'andsc.s=students.s;
结果:
(2)检索选修课程名为“数学”的学生学号与姓名。
代码:
selectsc.s,snamefromstudents,sc,courseswhereame='数学'andcourses.c=oandstudents.s=sc.s;
结果:
(3)检索没有选修C2课程的学生姓名与年龄。
代码:
selectsname,agefromstudentswherenotexists(select*fromscwhereo='c2'ands=students.s);
结果:
(4)检索选修全部课程的学生姓名。
代码:
selectsnamefromstudentswherenotexists(select*fromcourseswherenotexists(select*fromscwheres=students.sandcno=courses.c));
结果:
3.数据修改、删除
(1)把C2课程的非空成绩提高10%。
代码:
updatesc
setgrade=grade*1.1
whereo='c2'andoisnotnull
结果:
(2)在SC表中删除课程名为‘物理’的所对应的元组。
代码:
deletefromSCwherecnoin(selectcnofromcourseswherecname='物理')
(3)在S和SC表中删除学号为S8所对应的数据。
代码:
deletefromscwheresc.s='s8'deletefromstudentswherestudents.s='s8'
4.视图的操作
(1)建立男生学生的视图,属性包括学号,姓名,选修课程名和成绩。
代码:
createviewstudent_m(sno,sname,cname,grade)as
selectstudents.s,students.sname,cname,gradefromsc,students,courses
wherestudents.s=sc.sandcourses.c=oandsex='M'
(2)在男生视图中查询平均成绩大于80分的学生学号和姓名。
代码:
selectdistinctstudents.s,students.snamefromstudent_m,studentswherestudent_m.sno=students.sandgrade>80
结果:
5.库函数,授权的控制
(1)计算每个学生选修课程的门数、平均成绩。
代码:
selectstudents.s,students.sname,count(cno)选修门数,avg(grade)平均成绩fromstudents,scwherestudents.s=sc.sgroupbystudents.s,sname
结果:
(2)建立一个合法的用户,将SC表的查询权限授予该用户。
代码:
execsp_addloginschool,schooluseschoolgoexecsp_grantdbaccess'school','school'GRANTSELECTONSCTOschool;
(3)使用GRANT语句,把对基本表students、Courses、SC的使用权限授予其他用户。
代码:
GRANTallprivileges--授予权限
ONCoursesTOguest;
GRANTallprivileges--授予权限
ONstudentsTOguest;
GRANTallprivileges--授予权限
ONscTOguest;
结果:
6.数据库的备份恢复
(1)使用完全备份将你的实验数据库备份到软盘。
代码:
EXECsp_addumpdevice'DISK','backupdevice_sch','d:
\backupdev\sch.bak'BACKUPDATABASEschTObackupdevice_sch
(2)删除你所建立的数据库。
在对象资源管理器中找到数据库sch右键删除数据库sch。
(3)回复你的数据库。
代码:
restoredatabaseschfrombackupdevice_school
结果:
(4)在恢复后的数据库撤销你建立的基本表和试图。
代码:
droptablescdroptable
students
droptablecoursesdropviewstudent_m
五、实验心得体会
通过本次实验,我学到了很多东西,包括建表,导入数据,查询,插入。
重要的是我有机会用电脑自己进行实践,没接触的时候总是觉得它比较深奥或是不可接近的新型语言。
开始知道数据库的时候想学,不知道从何而起,感觉SQLSever数据库管理既然是单独一门课程一定会讲的比较细,也能学到真正实用的内容。
管理则需要对SQLSever数据库的原理有深刻的认识,SQLServer数据库的实验学习使我对数据库的有了新的进步。
但是课上的学习远远不足以让我熟练地使用管理数据库,因此我还要在将来的程序设计语言学习中更多的使用数据库,以在不同的环境中解决实际问题,更深刻的理解数据库的原理。