数据库实验报告第一次.docx
- 文档编号:4666014
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:12
- 大小:152.74KB
数据库实验报告第一次.docx
《数据库实验报告第一次.docx》由会员分享,可在线阅读,更多相关《数据库实验报告第一次.docx(12页珍藏版)》请在冰点文库上搜索。
数据库实验报告第一次
1、
数据库实验
姓名:
冯林峰
学号:
班级:
实验名称:
列表创建与查询
实验二:
新建数据库student_test,用Transcat-SQL语言创建课本P82给出的3张表(student表增加一列属性:
班级),用Transcat-SQL语言完成数据插入。
第一个表格
usestudent_test
createtablestudent
(
学号char(10)NOTNULLprimarykey,
姓名char(8)NULL,
性别char
(2)NULL,
年龄intNULL,
所在系char(20)NULL,
)
usestudent_test
insertstudent
values
('','李勇','男',20,'CS')
insertstudent
values
('','刘晨','女',19,'CS')
insertstudent
values
('','王敏','女',18,'MA')
insertstudent
values
('','张立','男',19,'IS')
GO
第二个表格
usestudent_test
createtableCourse
(
课程号intNULL,
课程名char(10)NULL,
先行课intNULL,
学分intNULL,
)
usestudent_test
insertCourse
values
(1,'数据库',5,4)
insertcourse
values
(2,'数学',null,2)
insertcourse
values
(3,'信息系统',1,4)
insertcourse
values
(4,'操作系统',6,3)
insertcourse
values
(5,'数据结构',7,4)
insertcourse
values
(6,'数据处理',null,2)
insertcourse
values
(7,'PASCAL',6,4)
GO
第三个表格
usestudent_test
createtableSC
(
学号char(10)NULL,
课程号intNULL,
成绩intNULL,
)
usestudent_test
insertSC
values
('',1,92)
insertSC
values
('',2,85)
insertSC
values
('',3,90)
insertSC
values
('',2,90)
insertSC
values
('',3,80)
GO
2、完成下列4项查询操作。
1)查询数学系姓王的学生姓名及年龄,并按学生年龄降序排序;
2)查询1班的选修课平均成绩>80的学生姓名和学号;//没有班级一项用所在系CS代替
3)查询每个班级每门课程的选课人数和平均分;//没有班级一项用所在系代替
4)查询李爽同学没选修的课程名;
1)
查询代码:
结果:
select姓名,年龄
fromStudent
where所在系='MA'and姓名like'王%'
orderby年龄desc
2)
查询代码:
结果:
select姓名,Student.学号
fromStudent,SC
whereStudent.学号=SC.学号andStudent.班级='3班'
groupby姓名,Student.学号havingavg(成绩)>80;
3)
查询代码:
结果:
select班级,课程名,count(a.学号)as'选课人数',avg(成绩)as'平均分'
fromStudentajoinSCbona.学号=b.学号joinCourseconb.课程号=c.课程号groupby班级,课程名;
4)
查询代码:
结果:
select课程名
fromCourse
where课程号notin
(select课程号
fromSC
where学号in
(select学号
fromStudent
where姓名='李勇'))
实验三:
1、设计若干张表,合理地表示如下信息:
学号,姓名,性别,生日,班级,系科,选修课程,课程名,课程编号,学分,课程容量,选课人数,成绩,任课教师(注意:
同一门课有多名任课教师)。
实验想法:
在建立表格的时候首先要考虑吧查询的问题,可以先把属性有联系的连接在一起,于是便有了student,course,和SC表格,而要通过表格中的属性将三张表格联系起来,于是便有了一下表格。
usestudent_
createtableStudent(
学号intnotnull,
姓名char(20),
性别char(40)default('男'),
生日datetimecheck(生日>'1980-01-01'and生日<'2020-01-01'),
班级char(40),
系科char(80)
);
usestudent_
createtableCourse
(
课程号intnotnull,
课程名varchar(80),
学分int,
选课人数int,
课程容量int
);
usestudent_
createtableSC(
学号int,
课程号int,
任课教师varchar(40),
成绩int
);
usestudent_
insertCourse
values
('1','数据库',4,56,120)
insertCourse
values
('2','数学',2,45,100)
insertCourse
values
('3','信息系统',3,80,100)
insertCourse
values
('4','操作系统',3,67,120)
insertCourse
values
('5','数据结构',4,78,100)
insertCourse
values
('6','信息处理',2,45,110)
insertCourse
values
('7','PASCAL语言',3,45,120);
usestudent_
insertStudent
values
(,'李勇','男','1993-02-02','2班','CS')
insertStudent
values
(,'刘晨','女','1994-02-04','3班','CS')
insertStudent
values
(,'王敏','女','1993-09-11','1班','MA')
insertStudent
values
(,'张立','男','1990-12-12','1班','IS');
usestudent_
insertSC
values
(,1,'王老师',92)
insertSC
values
(,2,'李老师',85)
insertSC
values
(,3,'张老师',88)
insertSC
values
(,2,'刘老师',90)
insertSC
values
(,3,'谢老师',80);
设计查询语句,完成以下查询任务
1)查询给李勇同学授课的所有任课教师;
解法一:
查询代码
查询结果
usestudent_
select任课教师
fromSC
whereSC.学号in
(select学号
fromStudent
where姓名='李勇');
解法二:
查询代码
查询结果
usestudent_
select任课教师
fromSC,Student
whereSC.学号=student.学号ANDstudent.姓名='李勇'
2)查询某任课教师所授的每门课程中单科成绩最高的学生学号、姓名(任课教师可指定,如“李爽”)。
查询代码
查询结果
Usestudent_
select学号,姓名
fromStudent
where学号=
(select学号
fromSC
where成绩in
(selectmax(成绩)
fromSC
where课程号in
(select课程号
fromSC
where任课教师='刘老师'
)
));
实验问题:
首先老师说了三张表格有问题,于是我仔细思考了,发现最大的问题其实是数据冗余,因为在查询是,若是查询某门课的任课老师时会出现大量的数据重复,因为这任课老师是放在学生学号后面的,一个老师可能会教很多学生,这给信息查询和修改都带来了不方便,于是,我想的是出现第四章表格,即把课程号和任课老师拎出来,重新建立一张表格。
即SC表格变为以下两张表格:
这样多了两张表格之后可以有效地解决数据冗余问题,并且使根据课程查询任课老师更为便捷,不过还是没有解决数据更新冗余问题。
而想了很久之后也没有有效地方法,所以我心中最好的表格也只能是这样了。
实验感想:
数据库实验是一门很综合的实验,因为要考虑的东西很多,就像这个实验,虽然三个表格看起来没有什么问题,但是其实他是会出现大量的数据冗余的,所以我们考虑问题要全面,很多东西,不仅要考虑到实现,还要想到在实际应用中实现的困难以及不方便,经过这次实验,我对这门语言也有了一定的了解,收获很大。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告 第一次