数据库实验报告Word文档下载推荐.docx
《数据库实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据库实验报告Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
②带有比较运算符的子查询;
③带有ANY或ALL谓词的子查询;
④带有EXISTS谓词的子查询;
⑤视图查询与更新操作;
二、实验要求:
(1)为了便于程序正确性测试,需要对自己建立起来的数据表录入一些模拟数据(模拟数据是指符合数据格式要求的假数据),然后按照教材中结构化查询语言SQL章节例题和习题自己组织SQL语句:
(2)设计的SQL程序应该涵盖数据更新操作的全部内容不,包括插入、修改、删除;
(3)综合运用SQL语句实现数据插入、修改、删除等操作的综合运用能力。
(4)按照SQL语言编程要求,实现各类查询和检索操作;
(5)利用后台的SQL平台环境,编程验证数据库的控制保护功能。
(6)将查询视图命令等价改写为对数据表的查询操作命令,利用SQL编程设计完成并进行效率分析。
三、实验内容:
(1)根据以下给定的数据表信息分别对student,course,score,teacher,teching表进行数据插入和修改,以完成给定的数据录入,同时要求输入班级同学名录模拟客观真实情况,给student、score表添加30条以上记录,以便以后查询应用方便。
Student表:
Sno
sname
Sbirthday
Sclass
011110101
章海潮
1982.02.07
信管系0101
011111103
王天力
1982.03.04
电商系0101
011111204
董丞悟
1982.06.06
电商系0102
011112110
马丽鹃
1982.04.03
工商系0101
011113104
杨乾坤
1982.03.23
会计系0101
011113221
刘抗日
1983.01.16
会计系0102
011114111
丘海棠
1983.02.08
旅游系0101
011115208
齐振国
1982.07.22
旅游系0102
001011101
王晓悦
1982.01.12
材料系0001
001011212
程伊莲
1982.03.21
材料系0002
course表:
Cno
Cname
Cpno
Credit
Ctime
C001
数据库原理
C005
4
64
C002
高等数学
72
C003
管理信息系统
54
C004
操作系统
C006
3
32
数据结构
C007
计算机文化基础
2
C语言程序设计
score表:
Score
90
85
73
98
96
97
83
92
teacher表:
Tno
Tname
Tsex
Department
T001
江承基
男
信息管理系
T002
梁其征
T003
徐茉莉
女
T004
吴雅云
T005
杨运铎
电子商务系
T006
张昌盛
T007
程力衡
Teaching表:
cno
tdate
classroom
sclass
1988-01-09
西二405
1990-02-01
西二406
1985-09-10
西二504
1984-07-15
主401
1989-11-12
主402
1991-05-21
西二506
(2)将两个同学(数据自己临时设置,用后即删除)的两门课程的成绩以运行SQL语句插入的形式加入score表中。
该题用以验证、理解和掌握关系模型的完整性规则;
(3)求每门课的平均成绩,并把结果存入average表;
(4)将学生“马丽鹃”的出生日期改为“1982.8.20”;
(5)将所有学生的zipcode属性列值填补上;
(6)将average表中的所有课程的平均成绩置零;
(7)删除average表中的课程号为‘c007’的平均成绩记录;
(8)删除所有average表中平均成绩记录;
(9)建立一个临时学生信息表(tstudent),删除该表中的学号前六位为‘001011’的所有学生记录。
(10)查询全体学生的学号与姓名;
(11)查询全体学生的学号、姓名、所属班级;
(12)查询全体学生的详细记录;
(13)查询全体学生的姓名及其年龄;
(14)查询全体学生的姓名、出生年份;
(15)查询所有修过课的学生的学号;
(16)查询“信管系0101”班全体学生名单;
(17)查询查询所有年龄在27岁以下的学生姓名及其年龄;
(18)查询考试成绩有不及格的学生的学号;
(19)查询年龄在15至28岁之间的学生姓名、班级和年龄;
(20)查询年龄不在15至28岁之间的学生姓名、班级和年龄;
(21)查询“信管系0101”和“电商系0102”班的学生的姓名和班级信息;
(22)查询既不是“信管系0101”也不是“电商系0102”班的学生的姓名和班级信息;
(23)查询学号为“011113104”的学生的详细情况;
(24)查询学号以“0111”打头的学生信息;
(25)查询所有姓“张”学生的学号、姓名、性别、年龄;
(26)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;
(27)查询所有不姓“刘”学生的姓名;
(28)查询课程号以“C”开头的最后两个字母为“05”的课程号和课程名;
(29)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,试查找缺少考试成绩的学生和相应的课程号;
(30)查找全部有成绩记录的学生学号、课程号;
(31)查找“电商系0101”班年龄在27岁以下的学生学号、姓名;
(32)查找选修了“C001”号课程的学生学号及其成绩,查询结果按分数降序排序;
(33)查询全体学生情况,查询结果按所在班级升序排列,对同一班级中的学生按年龄降序排列;
(34)查询学生总人数;
(35)查询选修了课程的学生人数;
(36)在所有课程中查询最高分的学生学号和成绩;
(37)查询学习“C001”课程的学生最高分数;
(38)计算各个课程号与相应的选课人数;
(39)查询“电商系0102”班选修了两门课程以上的学生学号、姓名;
(40)自然连接student和score表;
(41)使用自身连接查询每一门课程的间接先行课(即先行课的先行课)
(42)使用复合条件连接查询选修“c001”号课程且成绩在90分以上的所有同学;
(43)使用复合条件连接查询每个学生选修的课程名及其成绩;
(44)查询选修了全部课程的学生;
(45)查询至少选修全部学分数为4个学分的课程的学生的学号、姓名;
(46)查询所有选修了C001号课程的学生学号、姓名;
(47)查询选修了课程C001或c007的学生学号、姓名;
(48)查询“会计系0102”班的学生及年龄不大于27岁(现有年龄)的学生;
(49)查询既选修了课程C001又选修了课程c007的所有学生学号、姓名;
(50)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;
(51)查询其他班中比“信管系0101”班所有学生年龄都小的学生名单;
(52)查询与“齐振国”在同一个班学习的学生学号、姓名、性别、年龄;
(53)建立“信管系0101”班学生的视图,定义视图名为“info_student1”;
(54)建立“信管系0101”班学生的视图,定义视图名为“info_student2”,并要求进行修改与插入时,仍须保证该视图只有“信管系0101”班学生;
(55)建立“信管系0101”班选修了“C001”课程的学生的视图,定义视图名为“info_C001_student1”;
(56)建立“信管系0101”班选修了“C001”课程且成绩在90分以上的学生的视图,定义视图名为“info_c001_student2”;
(57)定义一个反映学生年龄的视图,定义视图名为“vbirthday_student”;
(58)将学生表中所有女生记录定义为一个视图,视图名为“vfemale_student”;
(59)将学生的学号及其平均成绩定义为一个视图,视图名为“vaverage_student”;
(60)删除视图“info_student1”,删除后即重建;
(61)在“信管系0101”班学生视图中找出年龄小于27岁(现在的年龄)的学生;
(62)利用视图查询“信管系0101”班选修了“C001”课程的学生;
(63)通过“信管系0101”班info_student2视图中学号“011111103”的学生姓名改为“潘长江”;
(64)向“信管系0101”班info_student1视图中插入一个新学生记录,其中:
011111136,姓名:
张艺谋,性别:
男,出生日期:
1987.11.9;
(65)通过视图info_student1删除信管系0101班学号为“011111135”、姓名为“黄健中”的学生记录;
四、实验程序代码及结果:
(1)建表并输入数据
createtablestudent
(SnoChar(9),
snameChar(10)constraintc1notnull,
SbirthdayDatetime,
SclassChar(20),
constraintpk_studentprimarykey(sno)
);
createtablecourse
(CnoChar(6),
CnameChar(20),
CpnoChar(6),
CreditNumeric
(2),
CtimeNumeric
(2),
constraintpk_courseprimarykey(cno)
createtablescore
(SnoChar(20),
CnoChar(6),
Scorechar(20),
constraintpk_scoreprimarykey(Sno,Cno)
createtableteacher
(TnoChar(20),
TnameChar(20),
TsexChar
(2)constraintc2check(Tsexin('
男'
'
女'
)),
DepartmentChar(20),
constraintpk_teacherprimarykey(Tno)
createtableTeaching
tdatechar(20),
classroomchar(20),
Sclasschar(20),
constraintpk_Teachingprimarykey(Tno)
--
(2)插入删除
insertintoScore(sno,cno,score)values('
01110011'
C003'
90'
)
insertintoScore(sno,cno,score)values('
011110110'
C005'
92'
selectsno,cno,scorefromScorewheresno=‘01110011’orsno=‘011110110’;
deletefromScorewheresno=01110011orsno=011110110;
selectsno,cno,scorefromScorewheresno=01110011orsno=011110110;
--(3)求每门课的平均成绩,并把结果存入average表;
Createtableaverage(Cnochar(4)Primarykey,avesmallint);
Insertintoaverage(Cno,ave)
SelectCno,AVG(Score)fromscoregroupbyCno;
--(4)将学生“马丽鹃”的出生日期改为“.8.20”;
updatestudentsetSbirthday='
1982.8.20'
wheresname='
马丽鹃'
--(5)将所有学生的zipcode属性列值填补上;
updatestudentsetzipcode='
230000'
--(6)将average表中的所有课程的平均成绩置零;
Updateaveragesetave=0;
--(7)删除average表中的课程号为‘c007’的平均成绩记录;
DeletefromaveragewhereCno='
C007'
;
--(8)删除所有average表中平均成绩记录;
Deletefromaveragewhereave<
>
'
--(9)建立一个临时学生信息表(tstudent),删除该表中的学号前六位为‘’的所有学生记录。
Createtabletstudent(Snochar(12)Primarykey);
DeletefromtstudentwhereSnolike'
001011%'
--(10)查询全体学生的学号与姓名;
SelectSno,Snamefromstudent;
--(11)查询全体学生的学号、姓名、所属班级;
SelectSno,Sname,Sclassfromstudent;
--(12)查询全体学生的详细记录;
Select*fromstudent;
--(13)查询全体学生的姓名及其年龄;
SelectSname,2011-year(Sbirthday)fromstudent;
--(14)查询全体学生的姓名、出生年份;
SelectSname,Sbirthdayfromstudent;
--(15)查询所有修过课的学生的学号;
SelectdistinctSnofromscorewhereCno<
--(16)查询“信管系”班全体学生名单;
SelectSnamefromstudentwhereSclass='
信管系'
--(17)查询查询所有年龄在岁以下的学生姓名及其年龄;
SelectSname,2011-year(Sbirthday)fromstudentwhere2011-Sbirthday<
27;
--(18)查询考试成绩有不及格的学生的学号;
SelectdistinctSnofromscorewhereScore<
60;
--(19)查询年龄在至岁之间的学生姓名、班级和年龄;
SelectSname,Sclass,2011-year(Sbirthday)fromstudentwhere2011-Sbirthdaybetween15and28;
--(20)查询年龄不在至岁之间的学生姓名、班级和年龄;
SelectSname,Sclass,2011-year(Sbirthday)fromstudentwhere2011-Sbirthdaynotbetween15and28;
--(21)查询“信管系”和“电商系”班的学生的姓名和班级信息;
select*fromstudentwhereSclassin('
电商系'
);
--(22)查询既不是“信管系”也不是“电商系”班的学生的姓名和班级信息;
select*fromstudentwhereSclassnotin('
--(23)查询学号为“”的学生的详细情况;
SelectSname,Sbirthday,Sclass,Scorefromstudent,scorewherestudent.Sno=score.Snoandstudent.Sno='
011113104'
--(24)查询学号以“”打头的学生信息;
SelectSname,Sbirthday,Sclass,Scorefromstudent,scorewherestudent.Sno=score.Snoandstudent.Snolike'
0111%'
--(25)查询所有姓“张”学生的学号、姓名、性别、年龄;
SelectSno,Sname,2011-year(Sbirthday)fromstudentwhereSnamelike'
张%'
--(26)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;
__海%'
--(27)查询所有不姓“刘”学生的姓名;
SelectSnamefromstudentwhereSnamenotlike'
刘%'
--(28)查询课程号以“C”开头的最后两个字母为“”的课程号和课程名;
SelectCno,CnamefromcoursewhereCnolike'
C%05'
--(29)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,试查找缺少考试成绩的学生和相应的课程号;
SelectSno,Cnofromscorewherescoreisnull;
--(30)查找全部有成绩记录的学生学号、课程号;
SelectSno,Cnofromscorewherescoreisnotnull;
--(31)查找“电商系”班年龄在岁以下的学生学号、姓名;
SelectSno,SnamefromstudentwhereSclass='
and2011-Sbirthday<
--(32)查找选修了“C001”号课程的学生学号及其成绩,查询结果按分数降序排序;
SelectSno,ScorefromscorewhereCno='
C001'
orderbyscoreDESC;
--(33)查询全体学生情况,查询结果按所在班级升序排列,对同一班级中的学生按年龄降序排列;
Select*fromstudentorderbySclass,2011-year(Sbirthday)DESC;
--(34)查询学生总人数;
SelectCOUNT(*)fromstudent;
--(35)查询选修了课程的学生人数;
Selectcount(distinctSno)fromscore;
--(36)在所有课程中查询最高分的学生学号和成绩;
SelectSno,ScorefromscoregroupbyCnohavingMAX(Score);
--(37)查询学习“C001”课程的学生最高分数;
SelectMax(Score)fromscorewhereCno='
--(38)计算各个课程号与相应的选课人数;
SelectCOUNT(Sno)fromscoregroupbyCno;
--*(39)查询“电商系”班选修了两门课程以上的学生学号、姓名;
selectstudent.sno,snamefromstudentwherestudent.snoin
(selectstudent.snofromstudent,Scorewhere
sclass='
andstudent.sno=Score.snogroupbystudent.snohavingcount(cno)>
=2);
--(40)自然连接student和score表;
Selectstudent.Sno,Sname,Sbirthday,Sclass,Cno,scorefromstudent,scorewherestudent.Sno=score.Sno;
--(41)使用自身连接查询每一门课程的间接先行课(即先行课的先行课)
Selectfirst.Cno,second.Cpnofromcoursefirst,coursesecondwherefirst.Cpno=second.Cno;
--(42)使用复合条件连接查询选修“c001”号课程且成绩在分以上的所有同学;
Selectstudent.Snofromstudent,Scorewherestudent.Sno=score.SnoandCno='
c001'
andScore>
90;
--(43)使用复合条件连接查询每个学生选修的课程名及其成绩;
selectstudent.sno,sname,cname,scorefrom