当前位置:文档之家› 数据库实验报告

数据库实验报告

实验一创建数据库及关系表一、实验目的1. 掌握SQL Server数据库管理系统的使用,能够中该环境中进行日常数据库操作;2. 掌握在SQL Server中使用图形化工具创建数据库的方法;3.掌握建立关系表的语句,掌握定义主码约束及外码约束的语句;4.掌握修改表结构的语句。

二、实验要求1.了解SQL Server数据库的组成,会使用图形化工具创建数据库。

2.编写建立表及主、外码约束的T-SQL语句,并执行这些语句,在数据库中建立符合要求的关系表。

3.编写修改表结构的语句。

三、实验内容和步骤1.创建符合如下条件的数据库:数据库的名字为:Students数据文件的逻辑文件名为:Students_dat,存放在D:\Test录下(若D:盘中无此子目录,可先建立此目录,然后再创建数据库。

);文件的初始大小为:5MB;增长方式为自动增长,每次增加1MB。

日志文件的逻辑文件名字为:Students_log,也存放在D:\Test目录下;日志文件的初始大小为:2MB;日志文件的增长方式为自动增长,每次增加10%。

2.在已建立的Students数据库中,写出创建满足下述条件的四张表的SQL 语句,并查看执行结果。

Teacher表结构Create table student (Sno char(7)primary key,Sname nchar(10)not null,Ssex nchar(2),Sage tinyint,Sdept nvarchar(20),Spec char(10))create table course(Cno char(10),Cname nvarchar(20)not null,Credit int,Semester tinyint,Primary key(Cno))create table sc(Sno char(7)not null,Cno char(10)not null,Grade tinyint,primary key(Sno,Cno),foreign key(Sno )references Student(Sno), foreign key(Cno )references Course(Cno), )create table teacher(Tno char(8)not null,Tname char(10)not null,Dept nvarchar(20),Salary numeric(6,2),Birthery smalldatetime)执行结果:2.写出实现如下操作的SQL语句,并查看执行结果:(1)在SC表中添加一个新的修课类别列:列名为:XKLB,类型为char(4)。

alter table scadd XKLB char(4)(2)将Course表中的Credit列的类型改为:tinyint(微整型,取值范围在0~255)。

alter table coursealter column Credit tinyint(3)删除Student表的spec列。

alter table studentdrop column spec(4)为Teacher表添加主码约束,其主码列为:Tno。

alter table teacheradd constraint y_sprimary key(Tno)3.执行下列语句,能否成功为什么INSERT INTO SC VALUES(‘S001’, ’C01’, 88,’必修’)答:不成功,因为错误显示sc表的sno学号列有外键约束,它是引用的student学生表里面的学号,所以执行前面的语句时’s001’不存在于学生表中,所以执行不成功。

若在student学生表中插入学号’s001’的学生信息,如:insert into student values('s001','王盼','女',19,'数学系')则再执行该语句时成功。

四.实验小结:通过这次实验,学习了SQL Server数据库管理系统的使用的方法,通过自己创建数据库和表,熟悉了上课中讲到的相关知识,在完成实验的同时对自己所编写的代码进行调试和查错,并且自己发现错误并改正,对知识的理解和掌握都有很大的帮助。

实验二数据操作语句一、实验目的理解数据操作语句的功能。

二、实验要求1.根据实验一建立的数据库和关系表,导入部分数据;2.编写实现数据操作功能的SQL语句。

三、实验内容及步骤1. 查询计算机系年龄最大的三个学生的姓名和年龄。

select top 3 sname,sage,sdept from studentwhere sdept='计算机系'order by sage desc2. 统计每个学生的选课门数,并按选课门数的递增顺序显示结果。

select sno,count(*)from scgroup by snoorder by count(*)3. 列出总成绩超过200分的学生,要求列出学号、总成绩。

select sno,sum(grade)总成绩from scgroup by snohaving sum(grade)>2004. 查询成绩80分以上的学生的姓名、课程号和成绩,并将结果按成绩的降序排列。

select Sname ,cno,Grade from scjoin student s on=where grade >80order by grade desc5. 查询学生的选课情况,要求列出每位学生的选课情况(包括未选课的学生),并列出学生的学号、姓名、课程号和考试成绩。

select,Sname,Cno,Gradefrom student left outer join scon=6. 列出“VB”课程考试成绩前三名的学生的学号、姓名、所在系和考试成绩。

select top 3 ,sname,sdept,grade from student sjoin sc on=join course c on=where cname='VB'order by grade desc7. 查询哪些课程没有人选,要求列出课程号和课程名。

select,Cname from Course c left join scon=where is null8.查询计算机系学生考试成绩高于全体学生的总平均成绩的学生的姓名、考试的课程名和考试成绩。

select sname,cname,grade from student sjoin sc on=join course c on=where grade>all(select avg(grade)from sc)and sdept ='计算机系'9.查询VB考试成绩最低的学生的姓名、所在系和VB成绩。

select top 1 sname,sdept,grade from student sjoin sc on=join course c on=where cname ='VB'order by grade10. 查询VB课程考试成绩高于VB平均成绩的学生的姓名。

select sname from student sjoin sc on=join course c on=where cname='VB'and grade>all(select avg(grade)from scjoin course c on=where cname='VB')11. 查询平均成绩大于80分的课程的名字和学分。

select cname,semester from course cwhere cno in(select from scgroup byhaving avg(grade)>80)12. 统计每门课程的选课人数,包括有人选的课程和没有人选的课程,列出课程号,选课人数及选课情况,其中选课情况为:如果此门课程的选课人数超过100人,则显示“人多”;如果此门课程的选课人数在40~100,则显示“一般”;如果此门课程的选课人数在1~40,则显示“人少”;如果此门课程没有人选,则显示“无人选”。

select,count选课人数,casewhen count(*)>100 then'人多'when count(*)between 40 and 100 then'一般'when count(*)between 1 and 40 then'人少'when count(*)=0 then'无人选'end as选课情况from scgroup by13.查询至少选修了“9512102”号学生选修的全部课程的学生,列出学号和所选的课程号。

select sno,cno from sc sc1where not exists(select*from course c join sc on=where sno='9512102'and not exists(select*from scwhere=and=)14.查询至少选修了第2学期开设的全部课程的学生的姓名和所在系。

select sname,sdept from student swhere not exists(select*from course cwhere= 2and not exists(select*from scwhere=and=))15.修改“VB”课程的考试成绩,如果是计算机系的学生,则增加4分;如果是信息系的学生则增加8分,其他系的学生增加10分。

update sc set grade =grade +case sdeptwhen'计算机系'then 4when'信息系'then 8else 10endfrom student s join sc on=join course c on=16. 删除修课成绩小于50分的学生的修课记录delete from scwhere grade <5017. 删除信息系修课成绩小于50分的学生的修课纪录,分别用子查询和多表连接形式实现。

--子查询delete from scwhere sno in(select sno from studentwhere sdept ='信息系')and grade <50--多表连接delete from scfrom sc join student s on=where sdept='信息系'and grade <5018. 将所有选修了“c01”课程的学生的成绩加10分。

相关主题