数据库原理实验指导.doc

上传人:飞****2 文档编号:82399254 上传时间:2023-03-25 格式:DOC 页数:21 大小:99KB
返回 下载 相关 举报
数据库原理实验指导.doc_第1页
第1页 / 共21页
数据库原理实验指导.doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《数据库原理实验指导.doc》由会员分享,可在线阅读,更多相关《数据库原理实验指导.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、数 据 库 原 理 与 应 用 实 验指导书课程名称:数据库原理与应用 学时数:24一、适用专业教育技术学、电信专业二、实验目的与任务通过实验教学,使学生进一步加深理解数据库系统的基本理论,学会数据库设计方法、DBMS的使用,数据库系统的管理和维护,熟悉数据库技术的应用。三、实验配套的主要仪器设备几台(套)数装有WIN2000或WINXP及SQL SERVER 2005的电脑30台四、主要教材及参考书教材:数据库原理及应用教程 黄德才 科学出版社 参考书目:数据库系统概论(第四版) 王珊 高等教育出版社五、考核形式 1、平时实验完成情况(实验报告质量) 20%六、实验开出率实验开出率100%七

2、、实验项目与要求序号实验项目名称时数必开选开每套仪器人数目的要求实验类型1认识DBMS系统4必开1熟悉对DBMS的操作验证2基本表的定义、删除与修改4必开1掌握基本表的定义、删除与修改验证3建立与删除索引2必开1掌握索引的建立与删除验证4SQL的数据查询4必开1掌握SQL的数据各种查询综合5连接、嵌套和集合查询4必开1掌握连接、嵌套和集合查询综合6SQL的数据更新4必开1掌握SQL的数据更新验证7SQL的视图2必开1掌握SQL视图的建立、修改与删除验证实验一:认识DBMS系统1 实验目的 1 通过对某个商用数据库管理系统的使用,了解DBMS的工作原理和系统构架。 在此推荐国产金仓数据库管理系统

3、KingbaseES,可以从人大金仓公司的网站( 2 熟悉对DBMS的操作 3 搭建今后实验的平台2 实验平台2.1 操作系统: Windows 2000或者Windows XP 注:使用Professional版的操作系统建议安装数据库管理系统的教学版,Server版的操作系统建议安装数据库管理系统的企业版。2.2 数据库管理系统: 选择安装数据库管理系统之前,请仔细看清硬件的配置要求,今后的实验环境以KingbaseES为例进行说明。 你也可以选择其他国产数据库管理系统,或国外的MS SQL Server, Oracle, DB 2等。3 实验内容及要求3.1 安装和启动 1 根据安装文件

4、的说明安装数据库管理系统。在安装过程中记录安装的选择,并且对所作的选择进行思考,为何要进行这样的配置,对今后运行数据库管理系统会有什么影响。 2 学会启动和停止数据库服务,思考可以用哪些方式来完成启动和停止。 3 初步了解KingbaseES的安全性,这里主要是用户的登录和服务器预定义角色。可以尝试建立一个新的用户,赋予其数据库管理员的角色,今后的实验可以用该用户来创建数据库应用。3.2 数据库系统的构架 1 了解数据库系统的逻辑组件: 它们主要是数据库对象,包括基本表、视图、触发器、存储过程、约束等。今后将学习如何操作这些数据库对象。 2 了解数据库的物理组件: 思考数据库物理存储的存储单位

5、是什么,数据主要以什么方式存放,如何确定数据的存放位置。3.3 KingbaseES的管理和使用 了解KingbaseES如何通过它提供的工具对数据和数据库服务器进行管理和使用的。3.3.1 启动、暂停和停止KingbaseES 学会运用控制管理器和企业管理器进行操作。3.3.2 了解系统其他管理工具 初步了解KingbaseES的主要工具和它们的功能,为今后的实验做准备。例如,数据迁移工具:导入和导出数据使用的;企业服务器和作业调度管理器:可以用该工具对数据库服务器进行管理,管理和监视服务器性能和活动;查询分析器:给出数据库查询语句的查询计划和执行时间,帮助用户分析查询过程,进行查询优化。等

6、等。4 实验报告数据库系统概论实验报告题目:姓名日期实验环境:实验内容与完成情况:实 验 二实验项目名称: 基本表的定义、删除与修改(4课时,验证)实验主要内容及方法: 数据表的定义、删除及修改实验要求:(1) 了解并掌握SQL查询分析器及企业管理器的使用;(2) 掌握基本表的定义、删除与修改。实验目的:熟练掌握基本表的定义、删除与修改,为后继学习作准备。实验设备:装有SQLSERVER2008的电脑实验步骤:(1)启动SQL查询分析器;(2)选择SQLSERVER后,按确认;(3) 选择数据库;(4) 验证如下例题:表3.3 关系StudentsSnoSnameSsexSageSdeptS0

7、1S02S03S04S05S06王建平刘华范林军李伟黄河长江男女女男男男211918191820自动化自动化计算机数学数学数学表3.4 关系CoursesCnoCnamePre_CnoCreditsC01C02C03C04C05C06C07英语数据结构数据库DB_设计C+网络原理操作系统C05C02C03C07C054223333表3.5 关系ReportsSnoCnoGradeS01S01S02S02S02S03S03S04C01C03C01C02C03C01C02C0392849094827290751 定义基本表例3.1 建立表3.3所示的学生表Students,每个属性名的意义为Sno

8、-学号、Sname-姓名、Ssex-性别、Sage-年龄、Sdept-所在系。这里要求Sno和Sname不能为空值,且取值唯一。CREATE TABLE Students /*列级完整性约束条件*/ (Sno CHAR(5) NOT NULL, /* Sno不能为空值*/ Sname CHAR(20) NOT NULL, /*Sname不能为空值*/ Ssex CHAR(2), Sage INT, Sdept CHAR(15), CONSTRAINT un_Sno UNIQUE(Sno), /* Sno取值唯一的约束*/ CONSTRAINT un_Sname UNIQUE(Sname); /

9、* Sname取值唯一的约束*/说明:在Microsoft SQL Server 2008的查询分析器(Query Analyzer)中使用单条SQL语句,其末尾不需要分号“;”作为命令结尾标记。通常,SQL Server 2008对大多数末尾带有分号的SQL命令都能顺利执行,但对少数的SQL命令,末尾若带分号,则SQL Server 2008会给出错误信息提示。 比如,若在例3.59的SQL命令末尾加上一个分号“;”,SQL Server 2008就会出现“Incorrect syntax near ;”的提示,虽然SQL Server 2000实际上已经执行了该命令。例3.1-1 建立表3

10、.4所示的课程表Courses,其属性名意义分别为Cno-课程号, Cname-课程名, Pre_Cno-先修课程号, Credits-学分。CREATE TABLE Courses (Cno CHAR(5) NOT NULL, /* Cno不能为空值*/ Cname CHAR(20) NOT NULL, /*Cname不能为空值*/ Pre_Cno CHAR(5), Credits INT, CONSTRAINT un_Cno UNIQUE(Cno); /*Cno取值唯一的约束*/例3.1-2 建立表3.5所示的成绩表Reports。其中的属性名意义分别为Sno-学号,Cno-课程号和Gra

11、de-考试成绩。 CREATE TABLE Reports ( Sno CHAR(5) NOT NULL, /* Sno不能为空值*/ Cno CHAR(5) NOT NULL, /* Cno不能为空值*/ Grade INT, CONSTRAINT Sno_Cno UNIQUE(Sno,Cno); /*Sno+Cno取值唯一的约束*/2 修改基本表例3.2 向基本表Students中增加“入学时间”属性列,其属性名为Sentrancedate,数据类型为DATETIME型。ALTER TABLE Students ADD Sentrancedate DATETIME; 例3.3 将Sage(

12、年龄)的数据类型改为SMALLINT型。ALTER TABLE Students ALTER COLUMN Sage SMALLINT;例3.4 删除Sname(姓名)必须取唯一值的约束。ALTER TABLE Students DROP CONSTRAINT un_Sname;注意:SQL Server 2008 增加了删除属性的命令。比如,删除属性列Sentrancedate的命令为:ALTER TABLE Students DROP COLUMN Sentrancedate;说明: 为了保证后面例子能够顺利运行,请大家一定将属性列Sentrancedate从Students表中删除。 为

13、了调试SQL语句方便,这里没有在表Reports中增加参照完整性约束,甚至没有定义主键。3 删除基本表例3.5 删除Students表。DROP TABLE Students;说明:此表删除后,请立即用例3.1将其建立起来,以便后面的例子使用。4 向表中添加元组例3.6 将一个学生元组(S01,王建平,男,21,计算机)添加到基本表Students中。INSERTINTO StudentsVALUES (S01,王建平,男,21,自动化);说明: 请读者用这个命令将其余5个学生的元组也添加到基本表Students中。 向Courses表插入元组(C01,英语,4)的命令为:INSERTINTO

14、 CoursesVALUES (C01,英语,4);请大家将其余6门课程的信息插入Courses表中。例3.7 将学习成绩的元组(S01, C01)添加到基本表Reports中。INSERTINTO Reports(Sno, Cno)VALUES (S01,C01);说明:请大家用这个命令将其余7个选课元组也添加到基本表Reports中.实 验 三实验项目名称: 建立与删除索引(2课时,验证)实验主要内容及方法: 索引的建立与删除实验要求:(1) 掌握建立索引的二种方法,即在基本表中建立和用命令方式建立。;(2) 掌握删除索引的方法。实验目的:熟练掌握索引的建立与删除的方法。实验设备:装有SQ

15、LSERVER2005的电脑实验步骤:(1)启动SQL查询分析器;(2)选择SQLSERVER后,按确认;(5) 选择数据库;(6) 验证如下例题:1 建立索引例3.8 为学生选课数据库中的Students,Courses,Reports三个表建立索引。其中Students表按Sno(学号)升序建唯一索引,Courses表按Cno(课程号)升序建唯一索引,Reports表按Sno(学号)升序和Cno(课程号)号降序建唯一索引。其语句为:CREATE UNIQUE INDEX Stu_Sno ON Students(Sno);CREATE UNIQUE INDEX Cou_Cno ON Cour

16、ses(Cno);CREATE UNIQUE INDEX Rep_Scno ON Reports(Sno ASC, Cno DESC);例3.9 在基本表Students的Sname(姓名)和Sno(学号)列上建立一个聚簇索引,而且Students中的物理记录将按照Sname值和Sno值的升序存放。其语句为:CREATE CLUSTERED INDEX Stu_Sname_Sno ON Students(Sname, Sno);2 删除索引例3.10 删除基本表Reports上的Rep_SCno索引。DROP INDEX Reports.Rep_Scno;实 验 四实验项目名称:sql 数据查

17、询(4课时,综合)实验主要内容及方法: 数据的各种查询方法实验要求:(1) 掌握查询语句的一般格式。;(2) 掌握无条件、有条件查询及查询结果排序与分组。实验目的:熟练掌握查询语句的使用。实验设备:装有SQLSERVER2005的电脑实验步骤:(1) 启动SQL查询分析器;(2) 选择SQLSERVER后,按确认;(3) 选择数据库;(4) 综合练习如下例题:1 无条件查询例3.11 查询全体学生的详细记录。这是一个无条件的选择查询,其命令为:SELECT * /*这里的“*”等价于ALL*/FROM Students;其结果为表3.3中的全部数据。例3.12 查询全体学生的姓名(Sname)

18、、学号(Sno)、所在系(Sdept)。这是一个无条件的投影查询,其命令为:SELECT Sname, Sno, SdeptFROM Students;例3.13 查询全体学生的姓名(Sname)、出生年份及学号(Sno)。由于SELECT子句的不仅可以是表中的属性列,也可以是表达式,故可以查询经过计算的值。其命令为:SELECT Sno, Sname, 2001-SageFROM Students;例3.14 查询全体学生的姓名、出生年份和学号,要求用小写字母表示学号中的字母。其命令为:SELECT Sname, Birth: Title, 1996-Sage BirthYear, LOWE

19、R(Sno) LsnoFROM Students;例3.15 查询选修了课程的学生学号。其命令为:SELECT DISTINCT SnoFROM Reports;2 条件查询例3.16 查询数学系全体学生的学号(Sno)和姓名 (Sname)。其命令为:SELECT Sno, SnameFROM StudentsWHERE Sdept=数学;例3.17 查询所有年龄在1822岁(包括18岁和22岁)之间的学生姓名(Sname)及年龄(Sage)。其命令为:SELECT Sname, SageFROM StudentsWHERE Sage=18 AND Sage=3实 验 五实验项目名称: 连接

20、、嵌套和集合查询(4课时,综合)实验主要内容及方法: 各种连接、嵌套和集合查询方法实验要求:(1) 掌握连接、嵌套和集合查询语句的一般格式。;(2) 掌握连接、嵌套和集合查询的各种使用方法。实验目的:熟练掌握连接、嵌套和集合查询的使用。实验设备:装有SQLSERVER2008的电脑实验步骤:(1) 启动SQL查询分析器;(2) 选择SQLSERVER后,按确认;(3) 选择数据库;(4) 综合练习如下例题:一、连接查询1 不同表之间的连接查询例3.37 查询每个学生及其选修课程的情况。本查询实际上是涉及Students与Reports两个表的连接操作。这两个表之间的联系是通过公共属性Sno实现

21、的,因此,其操作命令为:SELECT Students.*, Reports.*FROM Students, ReportsWHERE Students.Sno = Reports.Sno; 说明:若在以上等值连接中把目标列中重复的属性列去掉则为自然连接,其命令为SELECT Students.Sno, Sname, Ssex, Sage, Sdept, Cno, GradeFROM Students, ReportsWHERE Students.Sno= Reports.Sno;例3.38 查询每个学生的学号(Sno)、姓名(Sname)、选修的课程名(Cname)及成绩(Grade)。本查

22、询涉及到三个表的连接操作,完成该查询的SQL语句如下:SELECT Students.Sno, Sname, Cname, GradeFROM Students, Reports, CoursesWHERE Students.Sno= Reports.Sno AND Reports.Cno=Courses.Cno;2 自身连接例3.39 查询每一门课的间接先修课(即先修课的先修课)。在Courses表关系中,只有每门课的直接先修课信息,而没有先修课的先修课。要得到这个信息,必须先对一门课找到其先修课,再按此先修课的课程号,查找它的先修课程。这就需要要将Courses表与其自身连接。为方便连接运

23、算,这里为Courses表取两个别名分别为A,B。则完成该查询的SQL语句为:SELECT A.Cno, A.Cname, B.Pre_CnoFROM Courses A, Courses BWHERE A.Pre_Cno =B.Cno;3 外连接例3.40把例3.37中的等值连接改为左连接。该左连接操作在SQL Server 2000中的命令格式为:SELECT Students.Sno, Sname, Ssex, Sdept, Cno, GradeFROM StudentsLEFT JOIN Reports ONStudents.Sno= Reports.Sno;说明:以上左连接操作也可以

24、用如下的右连接操作代替,其结果完全一样。SELECT Students.Sno, Sname, Ssex, Sdept, Cno, GradeFROM ReportsRIGHT JOIN Students ONReports.Sno=Students.Sno;二、嵌套查询1 带谓词IN的嵌套查询例3.41 查询选修了编号为“C02”的课程的学生姓名(Sname)和所在系(Sdept)。SELECT Sname, SdeptFROM StudentsWHERE Sno IN (SELECT Sno FROM Reports WHERE Cno=C02);例3.42 查询与“李伟”在同一个系学习的

25、学生学号(Sno)、姓名(Sname)和系名(Sdept)。该查询可构造嵌套查询实现,其SQL语句如下:SELECT Sno, Sname, SdeptFROM StudentsWHERE Sdept IN (SELECT Sdept FROM Students WHERE Sname=李伟);说明:本例中的查询也可以用自身连接来完成,其SQL语句如下:SELECT A.Sno , A.Sname , A.SdeptFROM Students A , Students BWHERE A.Sdept=B.Sdept AND B.Sname=李伟;例3.43 查询选修了课程名为“数据结构”的学生学

26、号(Sno)和姓名(Sname)。本查询涉及学号、姓名和课程名(Cname)三个属性。学号和姓名存放在Students表中,课程名的存放在Courses表中,但Students与Courses两个表之间没有公共属性,必须通过Reports表建立它们之间的联系。所以本查询实际上涉及三个关系的连接操作。SELECT Sno, Sname /* 最后在Studenst关系中 */FROM Students /* 取出Sno和Sname */WHERE Sno IN (SELECT Sno /* 然后在SC关系中找出 */ FROM Reports /*选修了3号课程的学生学号*/ WHERE Cno

27、 IN (SELECT Cno /* 首先在Courses关系中 */ FROM Courses /*找出“数据结构”的课程号,*/ WHERE Cname = 数据结构); /*结果为C02号 */说明:本查询同样可以用连接查询实现:SELECT S.Sno, SnameFROM Students S, Reports R, Courses CWHERE S.Sno=R.Sno AND R.Cno=C.Cno AND C.Cname=数据结构;2 带有比较运算符的嵌套查询例3.44 将例3.42改为带有比较运算符的嵌套查询。由于一个学生只可能在一个系学习,因此子查询的结果是一个值,因此可以用

28、=代替IN,其SQL语句如下:SELECT Sno , Sname, SdeptFROM StudentsWHERE Sdept = (SELECT Sdept FROM Students WHERE Sname=李伟);3 带谓词ANY或ALL的嵌套查询例3.45 查询非自动化系的不超过自动化系所有学生的年龄的学生姓名(Sname)和年龄(Sage)。其查询命令为SELECT Sname, SageFROM StudentsWHERE Sdept自动化 AND Sage=ALL (SELECT Sage FROM Students WHERE Sdept= 自动化);说明:本查询也可以用集函

29、数来实现。其SQL语句如下:SELECT Sname, SageFROM StudentsWHERE Sdept自动化 AND Sage= (SELECT MIN(Sage) FROM Students WHERE Sdept=自动化);4 带谓词EXISTS的嵌套查询例3.46 查询所有选修了编号为“C01”课程的学生姓名(Sname)和所在系(Sdept)。本查询的SQL语句是:SELECT Sname, SdeptFROM StudentsWHERE EXISTS (SELECT * FROM Reports WHERE Sno=Students.Sno AND Cno=C01);例3.

30、47 将例3.42改为带谓词EXISTS的查询,其SQL语句如下SELECT Sno, Sname, SdeptFROM Students AWHERE EXISTS (SELECT * FROM Students B WHERE B.Sdept=A.Sdept AND B.Sname=李伟);例3.48 查询选修了所有课程的学生姓名(Sname)和所在系。由于没有全称量词,可将题目的意思转换成等价的用存在量词的形式:查询这样的学生,没有一门课程是他不选修的。其SQL语句为:SELECT Sname, SdeptFROM StudentsWHERE NOT EXISTS (SELECT * F

31、ROM Courses WHERE NOT EXISTS (SELECT * FROM Reports WHERE Sno=Students.Sno AND Cno=Courses.Cno);三、集合查询例3.49 查询计算机科学系的学生或年龄不大于20岁的学生信息。SELECT *FROM StudentsWHERE Sdept=计算机UNIONSELECT *FROM StudentsWHERE Sage=20;例3.50 查询数学系的学生且年龄不大于20岁的学生的交集,这实际上就是查询数学系中年龄不大于20岁的学生。SELECT *FROM StudentsWHERE Sdept=数学

32、AND Sage20;实 验 六实验项目名称: SQL的数据更新(4课时,验证)实验主要内容及方法: sql数据的插入、修改和删除实验要求:(1) 掌握sql数据插入、修改和删除语句的一般格式。;(2) 掌握sql数据插入、修改和删除使用方法。实验目的:熟练掌握sql数据插入、修改和删除的使用。实验设备:装有SQLSERVER2005的电脑实验步骤:(1) 启动SQL查询分析器;(2) 选择SQLSERVER后,按确认;(3) 选择数据库;(4) 验证如下例题:1 插入数据例3.52 设数据库中已有一个关系History_Student,其关系模式与Students完全一样,试将关系Stude

33、nts中的所有元组插入到关系History_Student中去,其SQL命令为:INSERTINTO History_StudentSELECT *FROM Students;2 修改数据例3.53 将学号为“S03”的学生年龄改为22岁,即要修改满足条件的一个元组的属性值。UPDATE StudentsSET Sage=22WHERE Sno=S03;例3.54 将所有学生的年龄增加1岁。即要修改多个元组的值。UPDATE StudentsSET Sage=1+Sage;例3.55 将数学系所有学生的成绩置零。由于学生所在系的信息在Students表中,而学习成绩在Reports表中,因此,可以将SELECT子查询作为WHERE子句的条件表达式。故该更新要求的SQL命令为:UPDATE ReportsSET Grade=0WHERE 数学=(SELECT SdeptFROM StudentsWHERE Students.Sno=Reports.Sno);3 删除数据例3.56 删除学号为“S04”的学生选修的课号为“C02”的记录。DELETEFROM ReportsWHERE Sno=S04 AND Cno=C02;例3.57 删除所有学生的选课记录。DELETEFROM Reports;这条DELETE

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁