文档库 最新最全的文档下载
当前位置:文档库 › 数据库实验报告第一次

数据库实验报告第一次

1、

姓名: 冯林峰 学号: 12084217 班级: 12080211 实验名称: 列表创建与查询

数据库实验

实验二:

新建数据库student_test,用Transcat-SQL语言创建课本P82给出的3张表(student表增加一列属性:班级),用Transcat-SQL语言完成数据插入。

第一个表格

use student_test

create table student

(

学号char(10)NOT NULL primary key,

姓名char(8)NULL,

性别char(2)NULL,

年龄int NULL,

所在系char(20)NULL,

)

use student_test

insert student

values

('200215121','李勇','男',20,'CS')

insert student

values

('200215122','刘晨','女',19,'CS')

insert student

values

('200215123','王敏','女',18,'MA')

insert student

values

('200215125','张立','男',19,'IS')

GO

第二个表格

use student_test

create table Course

(

课程号int NULL,

课程名char(10)NULL,

先行课int NULL,

学分int NULL,

)

use student_test

insert Course

values

(1,'数据库',5,4)

insert course

values

(2,'数学',null,2)

insert course

values

(3,'信息系统',1,4)

insert course

values

(4,'操作系统',6,3)

insert course

values

(5,'数据结构',7,4)

insert course

values

(6,'数据处理',null,2) insert course

values

(7,'PASCAL',6,4)

GO

第三个表格

use student_test

create table SC

(

学号char(10)NULL,

课程号int NULL,

成绩int NULL,

)

use student_test

insert SC

values

('200215121',1,92) insert SC

values

('200215121',2,85) insert SC

values

('200215121',3,90) insert SC

values

('200215122',2,90) insert SC

values

('200215122',3,80)

GO

2、完成下列4项查询操作。

1)查询数学系姓王的学生姓名及年龄,并按学生年龄降序排序;

2)查询1班的选修课平均成绩> 80 的学生姓名和学号;//没有班级一项用所在系CS代替

3)查询每个班级每门课程的选课人数和平均分;//没有班级一项用所在系代替

4)查询李爽同学没选修的课程名;

1)

查询代码:结果:

select姓名,年龄

from Student

where所在系='MA'and姓名like'

王%'

order by年龄desc

2)

查询代码:结果:

select姓名,Student.学号

from Student,SC

where Student.学号=SC.学号and Student.班级

='3班'

group by姓名,Student.学号having avg(成

绩)>80;

3)

查询代码:结果:

select班级,课程名,count(a.学号)as'选课人数

',avg(成绩)as'平均分'

from Student a join SC b on a.学号=b.学号join

Course c on b.课程号=c.课程号group by班级,

课程名;

4)

查询代码:结果:

select课程名

from Course

where课程号not in

(select课程号

from SC

where学号in

(select学号

from Student

where姓名='李勇'))

实验三:

1、设计若干张表,合理地表示如下信息:

学号,姓名,性别,生日,班级,系科,选修课程,课程名,课程编号,学分,课程容量,选课人数,成绩,任课教师(注意:同一门课有多名任课教师)。

实验想法:

在建立表格的时候首先要考虑吧查询的问题,可以先把属性有联系的连接在一起,于是便有了student,course,和SC表格,而要通过表格中的属性将三张表格联系起来,于是便有了一下表格。

use student_12084217

create table Student(

学号int not null,

姓名char(20),

性别char(40)default('男'),

生日datetime check(生日>'1980-01-01'and生日<'2020-01-01'),

班级char(40),

系科char(80)

);

use student_12084217

create table Course

(

课程号int not null,

课程名varchar(80),

学分int,

选课人数int,

课程容量int

);

use student_12084217

create table SC(

课程号int,

任课教师varchar(40),

成绩int

);

use student_12084217

insert Course

values

('1','数据库', 4, 56,120)

insert Course

values

('2','数学', 2,45,100)

insert Course

values

('3','信息系统', 3, 80,100)

insert Course

values

('4','操作系统', 3, 67,120)

insert Course

values

('5','数据结构', 4, 78,100)

insert Course

values

('6','信息处理', 2, 45,110)

insert Course

values

('7','PASCAL语言', 3, 45,120);

use student_12084217

insert Student

values

(200215121,'李勇','男','1993-02-02','2班','CS') insert Student

values

(200215122,'刘晨','女','1994-02-04','3班','CS') insert Student

values

(200215123,'王敏','女','1993-09-11','1班','MA') insert Student

values

(200215125,'张立','男','1990-12-12','1班','IS'); use student_12084217

values

(200215121,1,'王老师',92)

insert SC

values

(200215121,2,'李老师',85)

insert SC

values

(200215121,3,'张老师',88)

insert SC

values

(200215122,2,'刘老师',90)

insert SC

values

(200215122,3,'谢老师',80);

设计查询语句,完成以下查询任务

1)查询给李勇同学授课的所有任课教师;

解法一:

查询代码查询结果use student_12084217

select任课教师

from SC

where SC.学号in

(select学号

from Student

where姓名='李勇');

查询代码查询结果

use student_12084217

select任课教师

from SC,Student

where SC.学号=student.学号AND

student.姓名='李勇'

2)查询某任课教师所授的每门课程中单科成绩最高的学生学号、姓名(任课教师可指定,如“李爽”)。

查询代码查询结果

Use student_12084217

select学号,姓名

from Student

where学号=

(select学号

from SC

where成绩in

(select max(成绩)

from SC

where课程号in

(select课程号

from SC

where任课教师

='刘老师'

)

));

实验问题:

首先老师说了三张表格有问题,于是我仔细思考了,发现最大的问题其实是数据冗余,因为在查询是,若是查询某门课的任课老师时会出现大量的数据重复,因为这任课老师是放在学生学号后面的,一个老师可能会教很多学生,这给信息查询和修改都带来了不方便,于是,我想的是出现第四章表格,即把课程号和任课老师拎出来,重新建立一张表格。

即SC表格变为以下两张表格:

这样多了两张表格之后可以有效地解决数据冗余问题,并且使根据课程查询任课老师更为便捷,不过还是没有解决数据更新冗余问题。而想了很久之后也没有有效地方法,所以我心中最好的表格也只能是这样了。

实验感想:

数据库实验是一门很综合的实验,因为要考虑的东西很多,就像这个实验,虽然三个表格看起来没有什么问题,但是其实他是会出现大量的数据冗余的,所以我们考虑问题要全面,很多东西,不仅要考虑到实现,还要想到在实际应用中实现的困难以及不方便,经过这次实验,我对这门语言也有了一定的了解,收获很大。

相关文档
相关文档 最新文档