中南大学数据库实验报告.docx

上传人:b****9 文档编号:25842504 上传时间:2023-06-16 格式:DOCX 页数:17 大小:64.92KB
下载 相关 举报
中南大学数据库实验报告.docx_第1页
第1页 / 共17页
中南大学数据库实验报告.docx_第2页
第2页 / 共17页
中南大学数据库实验报告.docx_第3页
第3页 / 共17页
中南大学数据库实验报告.docx_第4页
第4页 / 共17页
中南大学数据库实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

中南大学数据库实验报告.docx

《中南大学数据库实验报告.docx》由会员分享,可在线阅读,更多相关《中南大学数据库实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

中南大学数据库实验报告.docx

中南大学数据库实验报告

目录

一、实验一

1.1实验要求------------------------------------1

1.2实验结果------------------------------------1

1.3源代码--------------------------------------1

二、实验二

2.1实验要求------------------------------------3

2.2实验结果------------------------------------3

2.3源代码-------------------------------------11

三、实验三

3.1实验要求-----------------------------------15

3.2实验结果-----------------------------------15

3.3源代码-------------------------------------15

四、实验感想

一、实验一

1.1实验要求

1)用SQL的DDL语句创建以下包括读者信息表,借还明细表,图书类别表,图书借阅明细表,图书明细表和工作人员表6个基本表,设置主键,并输入数据。

2)用不同的方法创建基本表的约束,并能够查看和删除约束;能够创建和删除默认规则,在试验中要求掌握主键约束的特点和用法;掌握惟一性约束的用法;掌握默认约束和默认规则的用法;掌握CHECK约束的用法;掌握利用主键与外键约束实现参照完整性的方法。

3)修改基本表,包括增加一个字段;删除一个字段;增加一个约束;修改字段的数据类型。

4)创建与删除索引

5)创建与删除视图

1.2实验结果

创建出六张基本表

1.3源代码

createtable读者信息表

(借书证号int,姓名varchar(10),性别tinyintconstraintc1check(性别in(N'男','女')),出生日期date,借书量int,工作单位nvarchar(50),电话nvarchar(50)constraintc2unique,emailnvarchar(50),PRIMARYKEY(借书证号));

createtable图书类别表

(类别号varchar(10),图书类别nvarchar(50),primarykey(类别号));

createtable图书明细表

(类别号varchar(10),图书编号int,图书名称nvarchar(50),作者varchar(10),出版社nvarchar(50),定价int,购进日期date,购入数int,复本数int,库存数int,primarykey(图书编号),foreignkey(类别号)references图书类别表(类别号)ondeletecascadeonupdatecascade);

createtable工作人员表

(工号int,姓名varchar(10),性别tinyintconstraintc4defaultN'男',出生日期date,电话nvarchar(50),emailnvarchar(50),primarykey(工号));

createtable借还明细表

(借书证号int,图书编号int,借还tinyint,借书日期date,还书日期date,数量int,工号int,constraintc3foreignkey(借书证号)references读者信息表(借书证号),foreignkey(图书编号)references图书明细表(图书编号),foreignkey(工号)references工作人员表(工号));

createtable图书借阅明细表

(图书编号int,图书名称nvarchar(50),借书证号int,借出日期date,归还日期date,库存数int,foreignkey(图书编号)references图书明细表(图书编号),foreignkey(借书证号)references读者信息表(借书证号));

altertable读者信息表dropconstraintc1;

altertable读者信息表addconstraintc1check(性别in(N'男',N'女'));

altertable读者信息表add年龄int;

altertable读者信息表drop年龄;

altertable读者信息表addunique(email);

altertable读者信息表altercolumn姓名char(6);

createuniqueindex读者_借书证号on读者信息表(借书证号);

dropindex读者_借书证号;

createview读者信息asselect*from读者信息表;

dropview读者信息;

二、实验二

2.1实验要求

用DDL先创建4个表,设置主键,再插入数据,然后做后面的查询

2.2实验结果

列出student表中所有记录的sname、sex和class列。

显示教师所有的单位即不重复的depart列。

显示学生表的所有记录。

显示score表中成绩在60到80之间的所有记录。

显示score表中成绩为85,86或88的记录。

显示student表中“95031”班或性别为“女”的同学记录。

以class降序显示student表的所有记录。

以cno升序、degree降序显示score表的所有记录。

显示“98031”班的学生人数。

显示score表中的最高分的学生学号和课程号。

显示“3-105”号课程的平均分。

显示score表中至少有5名学生选修的并以3开头的课程号的平均分数。

显示最低分大于70,最高分小于90的sno列。

显示所有学生的sname、cno和degree列。

显示所有学生的sname、cname和degree列。

列出“95033”班所选课程的平均分。

显示选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。

显示score中选修多门课程的同学中分数为非最高分成绩的记录。

显示成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。

显示出和学号为“108”的同学同年出生的所有学生的sno、sname和birthday列。

显示“张旭”老师任课的学生成绩。

显示选修某课程的同学人数多于5人的老师姓名。

显示“95033”班和“95031”班全体学生的记录。

显示存在有85分以上成绩的课程cno。

显示“计算机系”老师所教课程的成绩表。

显示“计算机系”和“电子工程系”不同职称的老师的tname和prof。

显示选修编号为“3-105”课程且成绩至少高于“3-245”课程的同学的cno、sno和degree,并按degree从高到低次序排列。

显示选修编号为“3-105”课程且成绩高于“3-245”课程的同学的cno、sno和degree。

列出所有任课老师的tname和depart。

列出所有老师和同学的姓名、性别和生日。

检索所学课程包含学生“103”所学课程的学生学号。

检索选修所有课程的学生姓名。

2.3源代码

SELECTsname,sex,classFROMStudent;--查询学生表的姓名,性别,班级

SELECTDISTINCTdepartFROMTeacher;--查询老师表的不重复系

SELECT*FROMStudent;--查询所有学生信息

SELECT*FROMScoreWHEREdegreeBETWEEN60AND80;--查询成绩在60到80之间的记录

SELECT*FROMStudentWHEREclass='95031'ORsex='女';--95031班或者女生信息

SELECT*FROMStudentORDERBYclassDESC;--按班级序号降序显示学生表

SELECT*FROMScoreORDERBYsno,degreeDESC;--按学号升序,成绩降序显示成绩表

SELECTCOUNT(*)FROMStudentWHEREclass='98031';--显示98031班学生人数

SELECTTOP1sno,cnoFROMScoreORDERBYdegreeDESC;--显示最高分学生的学号及课程号(使用top)

SELECTsno,cnoFROMScoreWHEREdegree=(SELECTMAX(degree)FROMScore);--同上(嵌套查询)

SELECTAVG(degree)FROMCourse,ScoreWHERECo='3-105'ANDCo=So;--显示3-105课程的平均分

SELECTAVG(degree)FROMScoreWHEREcnoIN(SELECTcnoFROMScoreGROUPBYcnoHAVINGCOUNT(*)>=5)ANDcnoLIKE'3%';--可换入子查询中

--至少有五名学生选修且以三开头课程的平均分

SELECTDISTINCTsnoFROMScoreWHEREdegreeBETWEEN70AND90;--成绩在70到90的学号

SELECTsname,degree,cnoFROMStudent,ScoreWHEREStudent.sno=Score.sno;

--学生表和成绩表的连接查询

SELECTsname,degree,cnameFROMStudent,Score,CourseWHEREStudent.sno=Score.snoANDCo=So;--学生表,成绩表,课程表的连接查询

SELECTcname,AVG(degree)FROMStudent,Course,Score

WHEREclass='95033'ANDStudent.sno=Score.snoANDSo=Co

GROUPBYcname;--95033班课程的平均分

SELECTDISTINCTStudent.sno,snameFROMStudent,ScoreWHEREStudent.sno=Score.snoANDcno='3-105'ANDdegree>ALL(SELECTdegreeFROMScoreWHEREsno='109');--选修了课程3-105的学生成绩比学号为109学生成绩高的信息

SELECTsno,cno,degreeFROMScoreWHEREdegree

FROMScoreGROUPBYcnoHAVINGCOUNT(*)>=2);--成绩表中不为最高分的学生信息

SELECT*FROMScoreWHEREdegree>ALL(SELECTdegreeFROMScoreWHEREsno='109'ORcno='3-105');--显示成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录

SELECTsno,sname,birthday--显示出和学号为“108”的同学同年出生的所有学生的sno、sname和birthday列

FROMStudentWHEREsubstring(birthday,1,4)=(selectsubstring(birthday,1,4)fromStudentwheresno='108');

SELECTsno,So,degree--显示“张旭”老师任课的学生成绩

FROMScore,Teacher,CourseWHERESo=CoANDCourse.tno=Teacher.tnoANDtname='张旭';

SELECTtnameFROMTeacherWHEREtnoIN(SELECTtnoFROMCourseWHEREcnoIN(SELECTcnoFROMScoreGROUPBYcnoHAVINGCOUNT(*)>5));--显示选修某课程的同学人数多于5人的老师姓名

SELECT*FROMStudentWHEREclass='95033'ORclass='95031';--显示“95033”班和“95031”班全体学生的记录

SELECTDISTINCTcnoFROMScoreWHEREdegree>85;--显示存在有85分以上成绩的课程cno

SELECT*FROMScoreWHEREcnoIN(SELECTcnoFROMCourseWHEREtnoIN(SELECTtnoFROMTeacherWHEREdepart='计算机系'));--显示“计算机系”老师所教课程的成绩表(子查询)

SELECTScore.*FROMTeacher,Course,Score

WHERETeacher.tno=Course.tnoANDCo=SoANDdepart='计算机系';----显示“计算机系”老师所教课程的成绩表(多表连接)

SELECTtname,profFROMTeacherWHERENOTEXISTS(SELECT*FROMTeacherxWHEREprof=ANY(SELECTprofFROMTeacheryWHEREy.depart='计算机')ANDx.depart='电子工程系');--显示“计算机系”和“电子工程系”不同职称的老师的tname和prof

SELECTcno,sno,degreeFROMScoreWHEREdegree>ANY(SELECTdegreeFROMScoreWHEREcno='3-245')ANDcno='3-105'ORDERBYdegreeDESC;--显示选修编号为“3-105”课程且成绩至少高于“3-245”课程的同学的cno、sno和degree,并按degree从高到低次序排列

SELECTcno,sno,degreeFROMScore

WHEREdegree>ALL(SELECTdegreeFROMScoreWHEREcno='3-245')AND

cno='3-105';--显示选修编号为“3-105”课程且成绩高于“3-245”课程的同学的cno、sno和degree

SELECTDISTINCTtname,departFROMTeacher,Course

WHERETeacher.tno=Course.tno;--列出所有任课老师的tname和depart

SELECTtname,sex,birthdayFROMTeacherUNIONSELECTsname,sex,birthday

FROMStudent;--列出所有老师和同学的姓名、性别和出生日期

SELECTDISTINCTScore.snoFROMScore,Scorex

WHERENOTEXISTS(SELECT*FROMScore,ScoreyWHEREy.sno='103'AND

NOTEXISTS(SELECT*FROMScore,ScorezWHEREz.sno=x.snoANDo=o));--检索所学课程包含学生“103”所学课程的学生学号

SELECTsnameFROMStudent

WHERENOTEXISTS(SELECT*FROMCourseWHERENOTEXISTS(SELECT*

FROMScoreWHEREsno=Student.snoANDcno=Co));--检索选修所有课程的学生姓名

三、实验三

3.1实验要求

1)创建一个查询图书库存量的存储过程CX_TSKCL_PROC,输出的内容包含类别号、图书编号、图书名称、库存数等数据内容。

2)创建一个名为TS_CX_PROC的存储过程,它带有一个输入参数,用于接受图书编号,显示该图书的名称、作者、出版和复本数。

3)修改TS_CX_PROC存储过程,使之能按图书名称查询图书的相关信息。

执行修改后的TS_CX_PROC存储过程,分别查询“航海英语”、“艺海潮音”等图书的信息。

4)删除创建的存储过程

5)在图书类别表上创建一个名为tslb_insert_trigger的触发器,当执行INSERT操作时,该触发器被触发,禁止插入记录。

6)在图书明细表上创建一个名为ts_delete_trigger的触发器,当执行DELETE操作时,该触发器被触发,禁止删除记录。

7)在读者信息表上创建一个名为dzxx_insert_trigger的触发器,当在读者信息表中插入记录时,将该记录中的借书证号自动插入借还明细表中。

8)删除上述触发器

3.2实验结果

创建出相应的存储过程和触发器

3.3源代码

createprocedureCX_TSKCL_PROCasselect类别号,图书编号,图书名称,库存数

from图书明细表

/*验证*/

execCX_TSKCL_PROC

/*删除*/

dropprocedureCX_TSKCL_PROC

 

createprocedureTS_CX_PROC@图书编号1char(10)

as

select图书名称,作者,出版社,副本数

from图书明细表

where图书编号=@图书编号1

/*验证*/

execTS_CX_PROC'476'

/*删除*/

dropprocedureTS_CX_PROC

 

alterprocedureTS_CX_PROC@图书名称1char(30)

as

select*

from图书明细表

where图书名称=@图书名称1

/*验证*/

execTS_CX_PROC'航海英语'

execTS_CX_PROC'艺海潮音'

createtriggerTSLB_INSERT_TRIGGERon图书类别表forinsertasrollback

/*验证*/

insert图书类别表values('233','233')

/*删除*/

droptriggerTSLB_INSERT_TRIGGER

createtriggerTS_DELETE_TRIGGERon图书明细表fordeleteasrollback

/*验证*/

delete图书明细表where图书编号='476'

/*删除*/

droptriggerTS_DELETE_TRIGGER

createtriggerDZXX_INSERT_TRIGGERon读者信息表forinsertasdeclare@借书证号1char(20)select借书证号=@借书证号1frominsertedinsert借还明细表(借书证号)values(@借书证号1)

/*验证*/

insert读者信息表(借书证号,姓名,性别)

values('0918000','张三','男')

/*删除*/

droptriggerDZXX_INSERT_TRIGGER

四、实验感想

其实感觉第四个实验更有挑战性,但遗憾的是我并没有做出来。

前三个中先做了第二个,当时一边看书一边打代码,,也不感觉太难。

后来在机房上机,本来是想做一下第一个实验,可是太久没练后好多知识都忘了,然后上机的时间基本上都去补了。

以后这种实验还是要提前做。

另外,安装SQLserver时也遇到了各种问题,比如验证身份等,也都通过度娘解决掉了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1