数据库实验报告.docx
- 文档编号:29060116
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:14
- 大小:20.61KB
数据库实验报告.docx
《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
数据库实验报告
数据库系统原理及应用
实验报告
班级:
学号:
姓名:
指导老师:
实验一
一、实验目的及要求:
(1)熟悉微软公司SQLServer的企业管理器(后台实验平台)和查询分析器(前台实验平台)内嵌的SQL编程环境,正确登录、退出和使用实验平台环境;
(2)熟练掌握SQL环境下的程序编辑和运行命令;
(3)建立一个教学管理数据库,即建立五个相关数据表。
练习并掌握定义、删除和修改表的数据结构操作。
建立数据库和数据表、数据视图并完成对各个数据表输入一定查询要求的模拟数据(模拟数据记录尽量多输一些且数据要能满足查询要求)的内容。
二、实验内容:
建立学生表:
createtablestudent
(snoChar(9),
snameChar(10)constraintc1notnull,
sbirthdayDatetime,
ssexChar
(2)constraintc2check(ssexin('男','女')),
sclassChar(20),
sremarkChar(100),
addressChar(40),
zipcodeChar(6),
phoneChar(15),
emailChar(40),
constraintpk_studentprimarykey(sno)
);
建立成绩表:
createtableScore
(snochar(9),
cnoChar(6),
scoreNumeric(3),
primarykey(sno,cno),
foreignkey(sno)referencesstudent(sno),
foreignkey(cno)referencescourse(cno),
);
建立课程表:
createtablecourse
(cnoChar(6),
cnameChar(20),
cpnoChar(6),
ctimeNumeric
(2),
creditNumeric
(2),
constraintpk_courseprimarykey(cno),
foreignkey(cpno)referencescourse(cno)
);
建立教师表:
createtableteacher
(tnoChar(7),
tnameChar(10)constraintc3notnull,
tbirthdayDatetime,
tsexChar
(2)constraintc4check(tsexin('男','女')),
positionChar(16),
departmentChar(16),
tamountnumeric(7,2),
experienceChar(200),
constraintpk_teacherprimarykey(tno)
);
建立教学表:
createtableteaching
(tnochar(7),
cnoChar(6),
tdatedatetime,
classroomchar(10),
sclasschar(20),
constraintpk_teachingprimarykey(tno,cno),
foreignkey(tno)referencesteacher(tno),
foreignkey(cno)referencescourse(cno)
);
三、实验心得体会:
略
实验二
一、实验目的及要求:
(1)熟练掌握数据更新语句,灵活地操作插入数据、修改数据和删除数据;
(2)熟练掌握关系数据库中的完整性概念的应用;
(3)了解数据录入的方法和过程。
(4)掌握单表查询的基本方法;
(5)掌握连接查询的基本方法;
(6)熟练掌握以下练习,并进行以下各类查询:
①选择表中的若干列、查询全部列、查询经过计算的值;
②选择表中的若干元组,即消除取值重复的行与查询满足指定条件的元组(包括:
比较大小、确定范围、确定集合、字符匹配、涉及空值和多种条件查询);
③对查询结果排序;
④使用集函数;
⑤对查询结果分组
(7)熟练掌握以下练习,并进行下列各类连接查询:
①等值与非等值连接查询;
②自身连接;
③外连接;
④复合条件连接;
(8)掌握嵌套查询的基本方法;
(9)掌握集合查询的基本方法;
(10)熟练掌握查询视图操作
(11)熟练掌握更新视图操作
(12)熟练关系的完整性概念,领会视图的用途
(13)练习以下各类查询:
①带有IN谓词的子查询;
②带有比较运算符的子查询;
③带有ANY或ALL谓词的子查询;
④带有EXISTS谓词的子查询;
⑤视图查询与更新操作;
二、实验内容:
(1)、根据以下给定的数据表信息分别对student,course,score,teacher,teching表进行数据插入和修改,以完成给定的数据录入,同时要求输入班级同学名录模拟客观真实情况,给student、score表添加30条以上记录,以便以后查询应用方便。
(示例语句)
insertintostudent(sno,sname,sbirthday,sclass,ssex)values(‘011102323’,’王心丽’,’1990-03-08’,’旅游系0103’,’女’);
(2)将两个同学(数据自己临时设置,用后即删除)的两门课程的成绩以运行SQL语句插入的形式加入score表中。
该题用以验证、理解和掌握关系模型的完整性规则;
insertintoscore(sno,cno,score)values('011102416','C007','89');//操作失败,不符合实体完整性
insertintoscore(sno,cno,score)values('011105132','C007','89');//操作失败,不符合实体完整性
(3)求每门课的平均成绩,并把结果存入average表;
createtableaverage
(cnochar(6),
avernumeric(3),
constraintpk_averageprimarykey(cno,aver),
foreignkey(cno)referencescourse(cno))
insertintoaverageselectcno,avg(score)fromscoregroupbycno;
(4)将学生“马丽鹃”的出生日期改为“1982.8.20”;
updatestudentsetsbirthday='1982-8-20'wheresname='马丽鹃';
(5)将所有学生的zipcode属性列值填补上;
altertablestudentaddzipcodechar(6);
(6)将average表中的所有课程的平均成绩置零;
updateaveragesetavgscore='0';
(7)删除average表中的课程号为‘c007’的平均成绩记录;
deletefromaveragewherecno='C007';
(8)删除所有average表中平均成绩记录;
deletefromaverage;
(9)建立一个临时学生信息表(tstudent),删除该表中的学号前六位为‘001011’的所有学生记录。
createtabletstudent
(snoChar(9),
snameChar(10)constraintc1notnull,
sbirthdayDatetime,
sclassChar(20),
primarykey(sno)
);
deletefromtstudentwheresnolike'001011%';
(10)查询全体学生的学号与姓名;
selectsno,snamefromstudent;
(11)查询全体学生的学号、姓名、所属班级;
selectsno,sname,sclassfromstudent;
(12)查询全体学生的详细记录;
select*fromstudent;
(13)查询全体学生的姓名及其年龄;
selectsname,year(getdate())-year(sbirthday)fromstudent;
(14)查询全体学生的姓名、出生年份;
selectsname,sbirthdayfromstudent;
(15)查询所有修过课的学生的学号;
selectsnofromcourse;
(16)查询“信管系0101”班全体学生名单;
selectsnamefromstudentwheresclass='信管系0101';
(17)查询查询所有年龄在27岁以下的学生姓名及其年龄;
selectsname,year(getdate())-year(sbirthday)fromstudentwhere(year(getdate())-year(sbirthday))<27;
(18)查询考试成绩有不及格的学生的学号;
selectsnofromscorewherescore<60;
(19)查询年龄在15至28岁之间的学生姓名、班级和年龄;
selectsname,sclass,year(getdate())-year(sbirthday)fromstudentwhereyear(getdate())-year(sbirthday)between15and28;
(20)查询年龄不在15至28岁之间的学生姓名、班级和年龄;
selectsname,sclass,year(getdate())-year(sbirthday)fromstudentwhereyear(getdate())-year(sbirthday)notbetween15and28;
(21)查询“信管系0101”和“电商系0102”班的学生的姓名和班级信息;
selectsname,sclassfromstudentwheresclassin('信管系')orsclassin('电商系');
(22)查询既不是“信管系0101”也不是“电商系0102”班的学生的姓名和班级信息;
selectsname,sclassfromstudentwheresclassnotin('信管系')
andsclassnotin('电商系');
(23)查询学号为“011113104”的学生的详细情况;
select*fromstudentwheresno='011113104';
(24)查询学号以“0111”打头的学生信息;
select*fromstudentwheresnolike'0111%';
(25)查询所有姓“张”学生的学号、姓名、性别、年龄;
selectsno,sname,ssex,year(getdate())-year(sbirthday)fromstudentwheresnamelike'张%';
(26)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;
selectsno,sname,ssex,year(getdate())-year(sbirthday)fromstudentwheresnamelike'_海%';
(27)查询所有不姓“刘”学生的姓名;
selectsnamefromstudentwheresnamenotlike'刘%';
(28)查询课程号以“C”开头的最后两个字母为“05”的课程号和课程名;
selectcno,cnamefromcoursewherecnolike'c%05';
(29)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,试查找缺少考试成绩的学生和相应的课程号;
selectsno,cnofromscorewherescorelike'null';
(30)查找全部有成绩记录的学生学号、课程号;
selectsno,cnofromscorewherescorenotlike'null';
(31)查找“电商系0101”班年龄在27岁以下的学生学号、姓名;
selectsno,snamefromstudentwheresclass='电商系'andyear(getdate())-year(sbirthday)<27;
(32)查找选修了“C001”号课程的学生学号及其成绩,查询结果按分数降序排序;
selectsno,scorefromscorewherecno='c001'orderbyscoredesc;
(33)查询全体学生情况,查询结果按所在班级升序排列,对同一班级中的学生按年龄降序排列;
select*fromstudentorderbysclass,year(getdate())-year(sbirthday)desc;
(34)查询学生总人数;
selectcount(*)fromstudent;
(35)查询选修了课程的学生人数;
selectcount(distinctsno)fromscore;
(36)在所有课程中查询最高分的学生学号和成绩;
selectsno,scorefromscorewherescore=(selectmax(score)fromscore);
(37)查询学习“C001”课程的学生最高分数;
selectmax(score)fromscorewherecno='c001';
(38)计算各个课程号与相应的选课人数;
selectcno,count(sno)fromscoregroupbycno;
(39)查询“电商系0102”班选修了两门课程以上的学生学号、姓名;
selectsno,snamefromstudentwheresclass='电商系'andsnoin(selectsnofromscoregroupbysnohavingcount(*)>2);
(40)自然连接student和score表;
selectstudent.sno,sname,sbirthday,sclass,cno,scorefromstudent,scorewherestudent.sno=score.sno;
(41)使用自身连接查询每一门课程的间接先行课(即先行课的先行课)
selecto,second.cpnofromcoursefirst,coursesecondwherefirst.cpno=o;
(42)使用复合条件连接查询选修“c001”号课程且成绩在90分以上的所有同学;
selectstudent.sno,sname,sbirthday,sclassfromstudent,scorewherestudent.sno=score.snoandcno='c001'andscore>90;
(43)使用复合条件连接查询每个学生选修的课程名及其成绩;
selectstudent.sno,sname,cname,scorefromstudent,score,coursewherestudent.sno=score.snoando=o;
(44)查询选修了全部课程的学生;
selectstudent.sno,snamefromstudentwherenotexists(
select*fromcoursewherenotexists(
select*fromscorewhereo=oandscore.sno=student.sno));
(45)查询至少选修全部学分数为4个学分的课程的学生的学号、姓名;
selectsno,snamefromstudentwherenotexists(
select*fromcoursec1wherec1.credt='4'andnotexists(
select*fromcoursec2whereo=oandc2.sno=student.sno
));
(46)查询所有选修了C001号课程的学生学号、姓名;
selectstudent.sno,snamefromstudent,scorewherestudent.sno=score.snoandcno='c001';
(47)查询选修了课程C001或c007的学生学号、姓名;
selectstudent.sno,snamefromstudent,scorewherecno='c007'orcno='c001';
(48)查询“会计系0102”班的学生及年龄不大于27岁(现有年龄)的学生;
select*fromstudentwheresclass='会计系'oryear(getdate())-year(sbirthday)<=27;
(49)查询既选修了课程C001又选修了课程c007的所有学生学号、姓名;
selectstudent.sno,snamefromstudent,scorewherecno='c001'andscore.sno=student.snointersect
selectstudent.sno,snamefromstudent,scorewherecno='c001'andscore.sno=student.sno;
(50)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;
selectstudent.sno,sname,ssex,year(getdate())-year(sbirthday)
fromstudent,score,coursewherescore.sno=student.snoando=oandame='数据库原理';
(51)查询其他班中比“信管系0101”班所有学生年龄都小的学生名单;
selectsno,snamefromstudentwhereyear(getdate())-year(sbirthday) selectyear(getdate())-year(sbirthday)fromstudentwhere sclass='信管系')andsclass<>'信管系'; (52)查询与“齐振国”在同一个班学习的学生学号、姓名、性别、年龄; selectsno,sname,ssex,year(getdate())-year(sbirthday)fromstudent wheresclassin(selectsclassfromstudentwheresname='齐振国'); (53)建立“信管系0101”班学生的视图,定义视图名为“info_student1”; createviewinfo_student1asselectsno,sname,sbirthday fromstudentwheresclass='信管系0101'; (54)建立“信管系0101”班学生的视图,定义视图名为“info_student2”,并要求进行修改与插入时,仍须保证该视图只有“信管系0101”班学生; createviewinfo_student2asselectsno,sname,sbirthday fromstudentwheresclass='信管系0101'withcheckoption; (55)建立“信管系0101”班选修了“C001”课程的学生的视图,定义视图名为“info_C001_student1”; createviewinfo_c001_student1asselectstudent.sno,sname,sbirthday fromstudent,scorewheresclass='信管系0101'andcno='c001'andscore.sno=student.sno; (56)建立“信管系0101”班选修了“C001”课程且成绩在90分以上的学生的视图,定义视图名为“info_c001_student2”; createviewinfo_c001_student2asselectstudent.sno,sname,sbirthday fromstudent,scorewheresclass='信管系0101'andcno='c001'andscore>90andscore.sno=student.sno; (57)定义一个反映学生年龄的视图,定义视图名为“vbirthday_student”; createviewvbirthday_student(sno,sname,sage) asselectsno,sname,year(getdate())-year(sbirthdayfromstudent; (58)将学生表中所有女生记录定义为一个视图,视图名为“vfemale_student”; createviewvfemale_studentasselect*fromstudentwheressex='女'; (59)将学生的学号及其平均成绩定义为一个视图,视图名为“vaverage_student”; createviewvaverage_student(sno,averageasselectsno,avg(score) fromscoregroupbysno; (60)删除视图“info_student1”,删除后即重建; dropviewinfo_student1; createviewinfo_student1asselect*fromstudentwheresclass='信管系0101'; (61)在“信管系0101”班学生视图中找出年龄小于27岁(现在的年龄)的学生; select*frominfo_student1whereyear(getdate())-year(sbirthday)<27; (62)利用视图查询“信管系0101”班选修了“C001”课程的学生; select*frominfo_C001_student1; (63)通过“信管系0101”班info_student2视图中学号“011111103”的学生姓名改为“潘长江”;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告