《数据库系统原理》实验报告..pdf
《《数据库系统原理》实验报告..pdf》由会员分享,可在线阅读,更多相关《《数据库系统原理》实验报告..pdf(53页珍藏版)》请在三一文库上搜索。
1、I 数据库系统原理课程实验指导书 计算机科学与技术专业 网络工程专业 佛山科学技术学院计算机系 2014 年 10 月 I 摘要 本书根据计算机科学与技术专业和网络工程专业人才培养计划和实验教学大纲的要求 编写,全书包括9 个实验: SQL数据定义功能实验, SQL数据基本查询 , 连接、嵌套和集合 查询,SQL的数据更新,视图的建立和维护, 触发器和存储过程, 宿主语言操纵数据库实验, 数据安全性实验,数据库备份和恢复实验。其中前6 个为必做实验,后3 个学生可在课外 完成。 公共邮箱: 邮箱密码: computer SQL Server 2000 查询分析器 企业管理器 服务管理器 Se
2、rverSQL ServerSQL ServerSQL II 前言 数据库系统产生于20 世纪 60 年代末。 40 多年来,数据库技术得到迅速发展,已形成 较为完整的理论体系和一大批实用系统,现已成为计算机软件领域的一个重要分支。数据 库系统原理是计算科学与技术专业的一门重要专业必修课程。 为了使理论教学与实践教学紧密结合,注重学生的实践能力的培养,我们注重本课程 实验教学的目的和任务是使学生通过实践环节深入理解和掌握数据库系统的基本理论,学 会数据库设计方法、 DBMS 的使用,数据库系统的管理和维护,使学生得到数据库应用的基 本训练,提高其解决实际问题的能力。 按照实验教学大纲本实验只有
3、12 学时,所以只能开设最基本的实验,如果要具有数据 库应用系统的设计开发能力,必须投入大量的课外时间;系统设计与实现的训练在“数据 库课程设计”中解决。实验指导书共包含9 个实验,其中实验一实验六为必做实验,实 验七实验九学生可用课外时间学习。 III 目录 前言 实验一 SQL数据定义,1 实验二 SQL数据查询,3 实验三连接、嵌套和集合查询,7 实验四 SQL的数据更新,12 实验五视图的建立和维护,14 实验六触发器和存储过程,19 实验七宿主语言操纵数据库实验,23 实验八数据安全性实验,33 实验九数据库备份和恢复实验,38 参考资料 1王珊 萨师煊 . 数据库系统概论(第四版)
4、 . 高等教育出版社, 2006 2李存斌 . 数据库应用技术 -SQL Server 2000简明教程 . 中国水利水电出版社, 2001 IV 学生 - 课程数据库xskc 中用到的三个表文件如下: 学生表: Student Sno(学号)Sname (姓名)Ssex(性别)Sage (年龄)Sdept (所在系) 200215121 李勇男20 CS (计算机科学系) 200215122 刘晨女19 CS (计算机科学系) 200215123 王敏女18 MA (数学系) 200215125 张立男19 IS(信息系) 课程表: Course Cno(课程号)Cname (课程名)Cpn
5、o(先修课)Ccredit (学分) 1 数据库5 4 2 数学2 3 信息系统1 4 4 操作系统6 3 5 数据结构7 4 6 数据处理2 7 PASCAL 6 4 学生选课表: SC Sno(学号)Cno(课程号)Grade(成绩) 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80 1 实验一 SQL 数据定义 一、实验目的和要求 1掌握利用SQL查询分析器和企业管理器进行数据库及基本表的定义、删除与修改; 2掌握索引的建立与删除的方法。 二、实验内容与步骤 (一)建立数据库 通过企业管理
6、器或查询分析器建立学生- 课程数据库xskc 。 create database xskc on ( name=xskc_data, filename=d:sjksyxskc_data.mdf) log on ( name=xskc_log, filename=d:sjksyxskc_log.ldf) 注:先在E:盘上建立一个文件夹(例如:E:sjksy) ,数据库文件保存到自建的文件夹中。 (二)基本表的定义、修改与删除 1定义基本表 利用 查询分析器 或企业管理器 创建基本表,并输入数据。 【题 1-01 】建立一个学生表Student ,它由学号Sno、姓名 Sname 、性别 Ssex
7、、年龄 Sage、所在 系 Sdept 五个属性组成。要求“学号”为主键,“姓名”不能为空, “性别”默认值为“男”。 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY,S Sname CHAR(8) NOT NULL, Ssex CHAR(2) DEFAULT 男 , Sage INT, Sdept CHAR(20) ); 说明: 在 Microsoft SQL Server 2000的查询分析器 (Query Analyzer)中使用单条SQL语句,其末 尾不需要分号“; ”作为命令结尾标记。通常,SQL Server 2000 对大多数末尾带有分
8、号的SQL命令都能 顺利执行,但对少数的SQL命令,末尾若带分号,则SQL Server 2000 会给出错误信息提示。比如,若 在实验五的例1 的 SQL命令末尾加上一个分号“;” ,SQL Server 2000 就会出现“ Incorrect syntax near ;”的提示,虽然SQL Server 2000实际上已经执行了该命令。 【题 1-02 】 建立课程表Course,它由课程号Cno、课程名 Cname 、先修课 Cpno、Ccredit学分四个 属性组成。要求“课程号”为主键,“课程名”属性不能为空。 2 CREATE TABLE Course (Cno CHAR(4)
9、PRIMARY KEY, Cname CHAR(40) NOT NULL , Cpno CHAR(4), Ccredit INT, FOREIGN KEY(Cpno) REFERENCES Course(Cno) ); 【题 1-03 】 建立学生选修课表SC ,包含学号Sno、课程号 Cno、成绩 Grade 三个字段。要求建立主 键及与 student 、 kc 表联接的外键,并创建检查约束(Grade=0 and Grade不仅可以是表中的属性列,也可以是表达式,故可以查询经过计算的值。其命令为: SELECT Sno, Sname, 2014-Sage as 2014-Sage FRO
10、M Student; 【题 2-04】 查询全体学生的学号、姓名、出生年份和所在系,要求用小写字母表示所有系名。其命 令为: SELECT Sno, Sname, 2012-Sage Year of Birth, LOWER(Sdept) Sdept FROM Student; 6 【题 2-05】查询选修了课程的学生学号。其命令为: SELECT DISTINCT Sno FROM SC; 2 条件查询 【题 2-06】查询数学系( MA )全体学生的学号(Sno)和姓名(Sname)。其命令为: SELECT Sno, Sname FROM Student WHERE Sdept=MA;
11、【题 2-07 】查询考试成绩有不及格的学生的学号。 SELECT DISTINCT Sno FROM SC WHERE Grade3 11 12 实验三连接、嵌套和集合查询 一、实验目的和要求 1掌握 SQL Server 查询分析器的使用方法,加深对SQL查询语句的理解。 2熟练掌握查询语句的一般格式。 3熟练掌握连接、嵌套和集合查询的使用。 二、实验内容及步骤 (一)连接查询 1 不同表之间的连接查询 【题 3-01】查询每个学生及其选修课程的情况。 本查询实际上是涉及Student 与 SC 两个表的连接操作。这两个表之间的联系是通过公共属性Sno 实 现的,因此,其操作命令为: SE
12、LECT 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; 2 自身连接 【例 35】 查询每一门课的间接先修课(即先修课的先修课)。 在 Course 表关系中,只有每门课的直接先修课信息,而没有先修课的先修课。要得到这个信息,必 须先对一门课找到
13、其先修课,再按此先修课的课程号,查找它的先修课程。这就需要要将Course 表与其 自身连接。为方便连接运算,这里为Course 表取两个别名分别为A,B。则完成该查询的SQL 语句为: SELECT A.Cno, A.Cname, B.Cpno FROM Course A, Course B WHERE A.Cpno =B.Cno; 13 3 外连接 【例 36】把例 33 中的等值连接改为左连接。该左连接操作在SQL Server 2000 中的命令格式为: SELECT Student.Sno, Sname, Ssex, Sdept, Cno, Grade FROM Student LE
14、FT JOIN SC ON Student.Sno= SC.Sno; 说明: 以上左连接操作也可以用如下的右连接操作代替,其结果完全一样。 SELECT Student.Sno, Sname, Ssex, Sdept, Cno, Grade FROM SC RIGHT JOIN Student ON SC.Sno=Student.Sno; 4 复合条件连接 【例 38】 查询每个学生的学号(Sno)、姓名 (Sname)、选修的课程名(Cname)及成绩 (Grade)。 本查询涉及到三个表的连接操作,完成该查询的SQL 语句如下: SELECT Student.Sno, Sname, Cna
15、me, Grade FROM Student, SC, Course WHERE Student.Sno= SC.Sno AND SC.Cno=Course.Cno; 14 (二)嵌套查询 1 带谓词 IN 的嵌套查询 【例 39】查询与“李伟”在同一个系学习的学生学号(Sno)、姓名 (Sname)和系名 (Sdept)。 该查询可构造嵌套查询实现,其SQL 语句如下: SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname= 李伟 ); 说明: 本例中的查询也可以
16、用自身连接来完成,其SQL 语句如下: SELECT A.Sno , A.Sname , A.Sdept FROM Student A , Student B WHERE A.Sdept=B.Sdept AND B.Sname= 李伟 ; 【例 40】 查询选修了编号为“2”的课程的学生姓名(Sname)和所在系 (Sdept)。 SELECT Sname, Sdept FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno=2); 【例 41】查询选修了课程名为“数据结构”的学生学号(Sno)和姓名 (Sname)。 本查询涉及学号、姓
17、名和课程名(Cname)三个属性。学号和姓名存放在Student 表中,课程名的存放 在 Course 表中,但Student 与 Course 两个表之间没有公共属性,必须通过SC 表建立它们之间的联系。 所以本查询实际上涉及三个关系的连接操作。 15 SELECT Sno, Sname /* 最后在 Studen 关系中*/ FROM Student /* 取出 Sno 和 Sname */ WHERE Sno IN (SELECT Sno /* 然后在 SC 关系中找出*/ FROM SC /*选修了 3 号课程的学生学号*/ WHERE Cno IN (SELECT Cno /* 首先
18、在 Course 关系中*/ FROM Course /*找出“数据结构”的课程号*/ WHERE Cname = 数据结构 ) ;/*结果为 5 号*/ 说明: 本查询同样可以用连接查询实现: SELECT S.Sno, Sname FROM Student S, SC R, Course C WHERE S.Sno=R.Sno AND R.Cno=C.Cno AND C.Cname=数据结构 ; 2 带有比较运算符的嵌套查询 【例 42】 将例 39 改为带有比较运算符的嵌套查询。由于一个学生只可能在一个系学习,因此子查 询的结果是一个值,因此可以用=代替 IN,其 SQL 语句如下: S
19、ELECT Sno , Sname, Sdept FROM Student WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname= 李伟 ); 3 带谓词 ANY或 ALL 的嵌套查询 【例 43】查询计算机系 (CS) 的不超过自动化系所有学生的年龄的学生姓名(Sname)和年龄 (Sage)。 其查询命令为 SELECT Sname, Sage FROM Student WHERE Sdept25 or (select Sage from inserted)16 begin print 年龄在16-25 岁之间 rollback end
20、【调用触发器】insert into Student values(200231001,王涛 ,男,30,IS) 在成绩表SC中定义一个触发器tri2,当修改一个记录时,确保此记录的成绩(Grade) 在 0100 分之间。 create trigger tri2 on SC for update as if not exists(select * from inserted where Grade between 0 and 100) print 成绩应在0-100 分之间 rollback 注:就是插入语句后,如果inserted表(插入或更新影响行构成的表)内的值不在0-100 之间,就
21、 撤销插入。 28 【调用触发器】 update SC set Grade=120 where Sno=200215122 在学生表Student 中创建一个触发器tri3,当删除学生表Student中学生时,自动删除成绩表SC中相 应学生的选课记录。 【创建触发器】 create trigger tri3 on student for delete as delete SC where Sno in(select Sno from deleted) delete Student where Sno in(select Sno from deleted) 【调用触发器】 delete Stud
22、ent where Sno=200215122 【注意】实现级联删除时,因为Student 表和 SC表的主键、外键关系,应先允许“级联删除相关记录”。 2存储过程 利用存储过程查找Student表中所有人的记录 【创建存储过程】 create procedure pro1 29 as select * from Student 【调用存储过程】exec pro1 利用存储过程查找Student表中某学号的记录 【创建存储过程】 create procedure pro2 xh char(9) as select * from student where Sno=xh 【调用存储过程】exec
23、 pro2 200215121 利用存储过程查找SC表中某学号、某门课程的记录 【创建存储过程】 create procedure pro3 xh char(9),kch char(4) as select * from SC where Sno=xh and Cno=kch 【调用存储过程】 exec pro3 200215121,1 创建一个存储过程pro4 ,将课程中某门课程的学分修改为指定的值,其中某门课程的课程号、指定的值 通过参数传递。并多次调用执行该存储过程来修改不同的课程的学分值。 【创建存储过程】 create procedure pro4 kch char(4),xf in
24、t as update course set Ccredit=xf where Cno=kch 【调用存储过程】 exec pro4 1,10 exec pro4 2,20 创建一个带返回值的存储过程,返回某人的平均成绩 【创建存储过程】 30 create procedure pro5 xh char(9) as declare pjf int select pjf=avg(grade) from SC where Sno=xh return pjf 【调用存储过程】 declare pjcj int exec pjcj=pro5 200215121 print pjcj= +cast(pj
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库系统原理 数据库 系统 原理 实验 报告
链接地址:https://www.31doc.com/p-5222991.html