收藏 分销(赏)

太原理工大学数据库实验报告.doc

上传人:快乐****生活 文档编号:3326938 上传时间:2024-07-02 格式:DOC 页数:45 大小:1.11MB
下载 相关 举报
太原理工大学数据库实验报告.doc_第1页
第1页 / 共45页
太原理工大学数据库实验报告.doc_第2页
第2页 / 共45页
太原理工大学数据库实验报告.doc_第3页
第3页 / 共45页
太原理工大学数据库实验报告.doc_第4页
第4页 / 共45页
太原理工大学数据库实验报告.doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、 本科实验报告课程名称: 数据库系统概论 实验项目:交互式SQL、数据完整性、用户鉴别与 数据控制实验地点: 致远楼B503 专业班级:软件12班 学号:20230238 学生姓名: 王者清风 指导教师: 李 雪 梅 2023年 3 月18 日一、实验目的和规定 熟悉通过 SQL 对数据库进行操作。二、实验内容和原理 1在 RDBMS 中建立一个学生-课程数据库,进行实验所规定的各种操作,所有的 SQL 操作均在此建立的新库里进行。 2根据以下规定认真进行实验,记录所有的实验用例及执行结果。 数据定义:基本表的创建、修改及删除;索引的创建和删除。 数据操作:完毕各类查询操作(单表查询,连接查询

2、,嵌套查询,集合查询);完毕各类更新操作(插入数据,修改数据,删除数据)。 视图的操作: 视图的定义(创建和删除),查询,更新(注意更新的条件)。 三、 重要仪器设备 操作系统:Windows 7。 数据库管理系统:SQL Server2023。四、操作方法与实验环节 实验数据记录 实验结果(一)数据定义: 一基本表的操作 1建立基本表 1)创建学生表 Student,由以下属性组成:学号 Sno(char 型,长度为 9,主码),姓名 Sname(char 型,长度为 20,唯一),性别 Ssex(char 型,长度为 2),年龄(smallint),所在系(char 型,长度为 20)。

3、create table Student (Sno char(9) primary key, Sname char(20) unique, Ssex char(2), Sage smallint, Sdept char(20); 2)创建课程表 Course,由以下属性组成:课程号 Cno(char 型,主码,长度为 4),课程名 Cname(char 型,长度为 40),先行课 Cpno(char型,长度为 4,外码),学分 Ccredit(smallint)。 create table Course (Cno char(4) primary key, Cname char(40), Cpn

4、o char(4), Ccredit smallint); 若设立 Cpno 外码,插入数据时会提醒违反外码约束。 3)创建学生选课表 SC, 由以下属性组成: 学号 Sno(char 型, 长度为 9),课程号 Cno(char 型,长度为 4),成绩 Grade(smallint),其中 Sno 和Cno 构成主码。 create table sc (Sno char(9), Cno char(4), Grade smallint, primary key(Sno,Cno), foreign key (Sno) references student(Sno), foreign key (C

5、no) references course(Cno); 2修改基本表: 1)向 Student 表增长“入学时间列”,其数据类型为日期型。 alter table Student add S_entrance date; 2)将年龄的数据类型由字符型(假设本来的数据类型是字符型)改为整数。 alter table Student alter column Sage int; 3)增长课程名称必须取唯一值的约束条件。 alter table Course add unique(Cname); 注意:修改表结构后,再次查看表,注意观测变化。 3删除基本表: 1)在所有的操作结束后删除 Studen

6、t 表。 drop table Student; 2)在所有的操作结束后删除 Course 表。 drop table Course; 3)在所有的操作结束后删除 SC 表。 drop table SC; 思考:删除表时,不同的删除顺序会有不同结果,为什么?注意错误提醒。 二索引操作 1建立索引 1)为学生课程数据库中的 Student,Course,SC 3 个表建立索引。其中 Student 表按学号升序建唯一索引, Course 表按课程号升序建唯一索引,SC 表按学号升序和课程号降序建唯一索引。 create unique index Stusno on Student(Sno); c

7、reate unique index Coucno on Course(Cno); create unique index SCno on SC(Sno ASC,Cno DESC); 2删除索引 1)删除 Student 表的 Stusname 索引。 drop index student.Stusname; 已建立已删除 (二)数据操作 一更新操作 1,插入数据 1)在 Student 表中插入下列数据: ,李勇,男,20,CS ,刘晨,女,19,CS ,王敏。女,18,MA ,张立,男,19,IS insert into student(Sno,Sname,Ssex,Sage,Sdept)

8、values(,李勇,男,20,CS); insert into student(Sno,Sname,Ssex,Sage,Sdept)values(,刘晨,女,19,CS); insert into student(Sno,Sname,Ssex,Sage,Sdept)values(,王敏,女,18,MA); insert into student(Sno,Sname,Ssex,Sage,Sdept)values(,张立,男,19,IS) 2)在 Course 表中插入以下数据: 1,数据库,5,4 2,数学,null,2 6,数据解决,null,2 4,操作系统,6,3 7,PASCAL 语言

9、,6,4 5,数据结构,7,4 1,数据库,5,4 3,信息系统,1,4 insert into course(Cno,Cname,Cpno,Ccredit)values(1,数据库,5,4); insert into course(Cno,Cname,Ccredit)values(2,数学,2); insert into course(Cno,Cname,Ccredit)values(6,数据解决,2); insert into course(Cno,Cname,Cpno,Ccredit)values(4,操作系统,6,3); insert into course(Cno,Cname,Cpn

10、o,Ccredit)values(7,PASCAL 语言,6,4); insert into course(Cno,Cname,Cpno,Ccredit)values(5,数据结构,7,4); insert into course(Cno,Cname,Cpno,Ccredit)values(1,数据库,5,4); insert into course(Cno,Cname,Cpno,Ccredit)values(3,信息系统,1,4); 3) 在 SC 表中插入以下数据: ,1,92 ,2,85 ,3,88 ,2,90 ,3,80 insert into sc (Sno,Cno,Grade) v

11、alues (,1,92); insert into sc (Sno,Cno,Grade) values (,2,85; insert into sc (Sno,Cno,Grade) values (,3,88); insert into sc (Sno,Cno,Grade) values (,2,90); insert into sc (Sno,Cno,Grade) values (,3,80); 4)将一个新学生元祖(学号:;姓名:陈冬;性别:男;所在系:IS;年龄:18 岁)插入到 Student 表中。 insert into student (Sno,Sname,Ssex,Sdept

12、,Sage) values (,陈冬,男,IS,18); (已做)5)将学生张成民的信息插入到 Student 表中。 insert into student values(,张成民,男,18,CS); (已做)6)插入一条选课记录:(,1)。 insert into sc(Sno,Cno) values(,1); (已做)7)对每一个系,求学生的平均年龄,并把结果存入数据库。 create table Dept_age (Sdept char(15), Avg_age smallint); insert into Dept_age (Sdept,Avg_age) select Sdept,a

13、vg(Sage)from student group by Sdept; 2修改数据 1)将学生 的年龄改为 22 岁。 update student set Sage=22 where Sno=; 2)将所有学生的年龄增长一岁。 update student set Sage=Sage+1; 3)将计算机科学系全体学生的成绩置零。 update sc set Grade=0 where CS=(select Sdept from student where student.Sno=sc.Sno); 3删除数据 1)删除学号为 的学生记录。 delete from student where

14、Sno=; 2)删除所有学生的选课记录。 delete from sc; 3)删除计算机科学系所有学生的选课记录。 delete from sc where CS=(select Sdept from student where student.Sno=SC.Sno ); 二 查询操作1单表查询 2) 查询全体学生的姓名、学号、所在系。select sno,sname,sdeptfrom Student;5) 查询全体学生的姓名、出生年份和所在院系,规定用小写字母表达所有系名。select sname,2023-sage birth,lower(sdept) sdeptfrom Student

15、;10)查询年龄在 20-23 岁(涉及 20 岁和 23 岁)之间的学生的姓名、系别和年龄。select sname,sdept,sagefrom Studentwhere sage between 20 and 2312)查询计算机科学系(CS)、数学系(MA)、和信息系(IS)学生的姓名和性别。select sname,ssexfrom Studentwhere Sdept in(cs,ma,is)15) 查询所有姓刘的学生的姓名、学号和性别。select sname,Sno,ssexfrom Studentwhere sname like 刘%19) 查询 DB_Design 课程的课

16、程号和学分。select Cno,Ccredit from course where Cname like DB_Design escape ; 23) 查询计算机科学系年龄在 20 岁以下的学生姓名。select snamefrom studentwhere sdept=cs and sage90;6) 查询每个学生的学号、姓名、选修的课程名及成绩。select student.Sno,Sname,Cname,Grade from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.Cno;3嵌套查询 1)查询与“刘晨”在

17、同一个系学习的学生。select Sno,Sname,Sdeptfrom Studentwhere Sdept in(select Sdeptfrom Studentwhere Sname=刘晨);2)查询选修了课程名为“信息系统”的学生学号和姓名。select Sno,Sname from student where Sno in(select Sno from sc where Cno in(select Cno from course where Cname=信息系统); 3) 找出每个学生超过他选修课程平均成绩的课程号。select cno from sc xwhere grade (

18、select AVG(Grade) from sc y where x.sno=y.sno group by Sno);4) 查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄。select sname,Sagefrom Studentwhere Sage = any (select sage from student where Sdept=cs) and Sdeptcs;5) 查询其他系中比计算机科学系所有学生年龄小的学生姓名和年龄。select sname,Sagefrom Studentwhere Sage = all (select sage from student wher

19、e Sdept=cs) and Sdeptcs;6)查询选修了 1 号课程的学生姓名。select Sname from student where exists(select * from sc where Sno=student.Sno and Cno=1);7) 查询没有选修 1 号课程的学生姓名。select Sname from student where not exists(select * from sc where Sno=student.Sno and Cno=1);8) 查询选修了所有课程的学生姓名。select Sname from student where not

20、exists (select * from Course where not exists (select * from sc where Sno=student.Sno and Cno=course.Cno);9) 查询至少选修了学生 选修的所有课程的学生号码。 select distinct Sno from sc scx where not exists (select * from sc scy where scy.Sno= and not exists (select * from sc scz where scz.Sno=scx.Sno and scz.Cno=scx.Cno);

21、4集合查询 1)查询计算机科学系的学生及年龄不大于 19 岁的学生。select * from student where Sdept=CS union select * from student where Sage=19;2) 查询选修了课程 1 或课程 2 的学生。select Sno from sc where Cno=1 union select Sno from sc where Cno=2;3) 查询计算机科学系的学生与年龄不大于 19 岁的学生的交集。select * from student where Sdept=CS intersect select * from stu

22、dent where Sage=19;4) 查询既选修了课程 1 又选修了课程 2 的学生。select Sno from sc where Cno=1 intersect select Sno from sc where Cno=2;5) 查询计算机科学系的学生与年龄不大于 19 岁的学生的差集。select * from student where Sdept=CS except select * from student where Sage=90;5)定义一个反映学生出生年份的视图。create view BT_S(Sno,Sname,Sbirth) as select Sno,Sna

23、me,2023-Sage from student;6) 将学生的学号及他的平均成绩定义为一个视图。create view S_G(Sno,Gavg) as select Sno,avg(Grade) from sc group by Sno; 7) 将 Student 表中所有女生记录定义为一个视图。 create view F_Student(F_sno,name,sex,age,dept) as select * from student where Ssex=女;2删除视图: 1)删除视图 BT_S: 3查询视图: 1)在信息系学生的视图中找出年龄小于 20 岁的学生。select S

24、no,Sage from IS_Student where Sage=80;4更新视图: 1)将信息系学生视图 IS_Student 中学号为 的学生姓名改为“刘辰”。 update IS_Student set Sname=刘辰 where Sno=;原视图2)向信息系学生视图 IS_Student 中插入一个新的学生记录,其中学号为 ,姓名为赵新,年龄为 20 岁。 insert into IS_Student values(,赵新,20,IS);3) 删除信息系学生视图 IS_Student 中学号为 的记录。delete from IS_Student where Sno=; 一、实验

25、目的和规定(1)了解 SQL Serer 数据库系统中数据完整性控制的基本方法 (2)纯熟掌握常用 CREATE 或 ALTER 在创建或修改表时设立约束 (3)了解触发器的机制和使用 (4)验证数据库系统数据完整性控制二、实验内容和原理 结合 ST 数据库中的各个表,设立相关的约束,规定涉及主键约束、外键约束、唯一约束、检查约束、非空约束等,掌握各约束的定义方法。 设立一个触发器,实现学生选课总学分的完整性控制,了解触发器的工作机制。 设计一些示例数据,验证完整性检查机制。 规定涉及如下方面的内容: 3.1 使用 SQL 语句设立约束 使用 CREATE 或 ALTER 语句完毕如下的操作,

26、涉及: 1 设立各表的主键约束 2 设立相关表的外键 3. 设立相关属性的非空约束、默认值约束、唯一约束 4. 设立相关属性的 CHECK 约束 3.2 使用触发器 创建一个触发器,实现如下的完整性约束: 当向 SC 表中插入一行数据时,自动将学分累加到总学分中。 l 记录修改学分的操作。 3.4 检查约束和触发器 分别向相关表插入若干条记录,检查你设立的完整性约束是否有效: 1 插入若干条包含对的数据的记录,检查插入情况 2 分别针对设立的各个约束,插入违反约束的数据,检查操作能否进行 3 向 SC 表插入若干行数据,检查触发器能否实现其数据一致性功能。三、重要仪器设备使用 SQL Serv

27、er 数据库管理系统提供的 SSMS 和查询编辑器四、 实验内容 实验结果与分析创建学生选课数据库 TEST,涉及三个基本表,其中 Student 表保存学生基本信息,Course表保存课程信息,SC 表保存学生选课信息,其结构如下表:CREATE TABLE Student ( Sno CHAR(8) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK( Ssex in (男,女), Sage SMALLINT, Sdept CHAR(20), Sclass CHAR(4) NOT NULL, Stotal smallint DEF

28、AULT 0 ); CREATE TABLE Course ( Cno CHAR(4) CONSTRAINT FK_Course PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4) , Ccredit SMALLINT ); CREATE TABLE SC ( Sno CHAR(8) FOREIGN KEY (Sno) REFERENCES Student(Sno), Cno CHAR(4), Grade SMALLINT CONSTRAINT SC_CHECK CHECK(Grade 0 AND Grade=0 AND Grade=100)l 掌握如何修改约束

29、 l 理解命名约束的优点二、检查完整性约束 通过修改数据库中的数据检查完整性约束条件的作用。 1检查主键约束 (1)执行下面的语句修改Student表,观测语句能否对的运营,解释为什么?INSERT INTO Student VALUES(20230101,李斌,男,20,CS,1001,0)INSERT INTO Student VALUES(20230001,李斌,男,20,CS,1001,0)消息2627,级别14,状态1,第1 行违反了PRIMARY KEY 约束PK_Student_DDDF64467F60ED59。不能在对象dbo.Student 中插入反复键。语句已终止。(由于s

30、no为主键不能有反复,所以无法运营)UPDATE Student SET Sno=20230021 WHERE Sname = 张立消息2627,级别14,状态1,第1 行违反了PRIMARY KEY 约束PK_Student_DDDF64467F60ED59。不能在对象dbo.Student 中插入反复键。语句已终止。(张立要修改的学跟王敏的学号反复了,由于学号是学生表的主键,不可以反复,所以无法运营)(2)执行下面的语句修改SC表,观测语句能否对的运营,解释为什么? INSERT INTO SC VALUES(20230001,1,78)INSERT INTO SC VALUES(2023

31、0001,null,78)2检查唯一约束 执行下面的语句修改Course表,观测语句能否对的运营,解释为什么? INSERT INTO Course VALUES(8,JAVA,7, 3)INSERT INTO Course VALUES(9,数据结构,7, 3) 3检查默认值、允许空值列 运营如下的语句: INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES(20230102,张盛,男,1008) 观测插入数据行的数值SELECT * FROM Student WHere Sno=20230102 4检查非空约束 下面的语句包含空值,检查运营结果

32、,解释为什么? INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES(20230103,张盛,男,NULL) INSERT INTO Student(Sno,Sname,Ssex) VALUES(20230104,张盛,男)5检查 CHECK 约束 执行下面的语句,解释其运营结果。 INSERT INTO SC VALUES(20230001,4,95) INSERT INTO SC VALUES(20230001,4,102) INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES(20230103,张盛,男,1008) INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES(20230104,张盛,1008)6检查外键约束 (1)执行下面的语句检查外键约束的作用 INSERT INTO SC VALUES(20230301,1,95) INSERT INTO SC VALUES(20230001,10,95) UPDATE SC SET Cno =

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服