中南大学数据库实验报告.docx
- 文档编号:25842504
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:17
- 大小:64.92KB
中南大学数据库实验报告.docx
《中南大学数据库实验报告.docx》由会员分享,可在线阅读,更多相关《中南大学数据库实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
中南大学数据库实验报告
目录
一、实验一
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时也遇到了各种问题,比如验证身份等,也都通过度娘解决掉了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学 数据库 实验 报告