数据库实验第三次.docx
《数据库实验第三次.docx》由会员分享,可在线阅读,更多相关《数据库实验第三次.docx(16页珍藏版)》请在冰豆网上搜索。
数据库实验第三次
南昌航空大学实验报告
2016年月日
课程名称:
数据库原理及应用实验名称:
SQL-更新操作
学号:
姓名:
同组人:
指导教师评定:
签名:
实验目的:
利用INSERT、UPDATE和DELETE命令(或语句)实现对表(或试图)数据的添加、修改与删除等更新操作,这里主要介绍对表的操作。
实验内如与要求:
建表和数据库的代码:
Createdatabasejxgl
USEjxgl
GO
CreateTableStudent
(SnoCHAR(5)notnullprimarykey(Sno),
Snamevarchar(20),
Sagesmallintcheck(Sage>=15ANDSage<=45),
Ssexchar
(2)default'男'check(Ssex='男'ORSsex='女'),
Sdeptchar
(2));
CreateTableCourse
(Cnochar
(2)NOTNULLprimarykey(Cno),
CnameVARCHAR(20),
Cpnochar
(2),
CcreditSMALLINT);
CreateTableSC
(Snochar(5)NOTNULLCONSTRAINTS_FFOREIGNKEYREFERENCESStudent(Sno),
CnoCHAR
(2)NOTNULL,
Gradesmallintcheck((GradeISNULL)OR(Gradebetween0and100)),
Primarykey(Sno,Cno),
foreignkey(Cno)referencesCourse(Cno));
insertintoStudentvalues('98001','钱横',18,'男','CS');
insertintoStudentvalues('98002','王林',19,'女','CS');
insertintoStudentvalues('98003','李民',20,'男','IS');
insertintoStudentvalues('98004','赵三',16,'女','MA');
insertintoCoursevalues('1','数据库系统','5',4);
insertintoCoursevalues('2','数学分析',null,2);
insertintoCoursevalues('3','信息系统导论','1',3);
insertintoCoursevalues('4','操作系统_原理','6',3);
insertintoCoursevalues('5','数据结构','7',4);
insertintoCoursevalues('6','数据处理基础',null,4);
insertintoCoursevalues('7','C语言','6',3);
insertintoSCvalues('98001','1',87);
insertintoSCvalues('98001','2',67);
insertintoSCvalues('98001','3',90);
insertintoSCvalues('98002','2',95);
insertintoSCvalues('98002','3',88);
图:
Student表:
Course表:
SC表:
请实践以下命令式更新操作
1、在学生表Student和学生选课表SC中分别添加表5-1和表5-2中的记录
表5-1:
表5-2:
代码:
InsertIntoStudentValues('99010','赵青江','18','男','CS');
InsertIntoStudentValues('99011','张丽萍','19','女','CH');
InsertIntoStudentValues('99012','陈景欢','20','男','IS');
InsertIntoStudentValues('99013','陈婷婷','16','女','PH');
InsertIntoStudentValues('99014','李军','16','女','EH');
InsertIntoSCValues('99010','1','87');
InsertIntoSCValues('99010','2',null);
InsertIntoSCValues('99010','3','80');
InsertIntoSCValues('99010','4','87');
InsertIntoSCValues('99010','6','85');
InsertIntoSCValues('99011','1','52');
InsertIntoSCValues('99011','2','47');
InsertIntoSCValues('99011','3','53');
InsertIntoSCValues('99011','5','45');
InsertIntoSCValues('99012','1','84');
InsertIntoSCValues('99012','3',null);
InsertIntoSCValues('99012','4','67');
InsertIntoSCValues('99012','5','81');
插入后:
Student表:
插入后:
SC表:
2、备份Student表到TS中并清空TS表。
代码:
未清空前TS表:
select*
intoTS
fromStudent;
清空后TS表:
3、给IS系的学生开设7号课程,建立所相应的选课记录,成绩暂定为60分。
代码:
表:
insertintoSC
selectSno,Cno,60
fromStudent,Course
whereSdept='IS'andCno='7';
4、把年龄小于等于16岁的女生计录保存到表TS中。
代码:
图:
insertintoTS
select*
fromStudent
whereSage<=16andSsex='女';
5、在表Student中检索每门课均不及格的学生学号、年龄、性别及所在系等信息。
代码:
图:
selectsno,sname,sage,sdept
fromstudent
wheresnoin
(
selectSno
fromSC
whereGrade<60
groupbySno
havingcount(sno)=count(cno));
6、将学号“99011”的学生姓名改为刘华,年龄增加一岁。
代码:
修改前:
updateStudent
setSname='李华',Sage=Sage+1
whereSno='99011';修改后:
7、把选修了“数据库系统”课程而成绩不及格的学生成绩全改为空值。
代码:
图:
updateSC
setGrade=NULL
whereSnoin
(
selectSno
fromSC
whereGrade<60andCno=
(
selectCno
fromCourse
whereCname='数据库系统'
))
8、将Student的前四位学生的年龄均增加1岁。
代码:
更改前:
更改后:
updateStudent
setSage=Sage+1
whereSnoin
(
selecttop4Sno
fromstudent)
9、学生王林在3课程中作弊,该课程成绩改为空值。
代码:
更改前:
更改后:
updateSC
setGrade=NULL
whereSno=
(selectSno
fromStudent
whereSname='王林')
andCno=3;
10、把成绩低于总平均成绩的女同学的成绩提高5%。
代码:
更改前:
更改后:
updateSC
setGrade=Grade+Grade*
whereSnoin
(selectSno
fromSC
whereGrade<(
selectAvg(Grade)
fromSC)andSnoin
(
selectSno
fromStudent
whereSsex='女'
))
11、在基本表中SC中修改课程号为“2”号课程的成绩,若成绩小于等于80分时降低2%若成绩大于80分时降低1%(用两个UPDATE语句实现)。
代码:
更改前:
更改后:
updateSC
setGrade=Grade-Grade*
whereGrade<80andCno='2'
updateSC
setGrade=Grade-Grade*
whereGrade>80andCno='2'
12、利用“selectinto…”命令来备份Student、SC、Course三表,备份表名自定。
代码:
更改前:
更改后:
select*intoTStudentfromStudent
select*intoTSCfromSC
select*intoTCoursefromCourse;
13、在基本表SC中删除尚无成绩的选课元组。
代码:
更改前:
(selectSno,GradefromSCwhereGradeisNULL)
delete
fromSC
whereGradeisNULL;
14、把‘钱横‘同学的选课情况全部删除、
代码:
更改前:
更改后:
delete
fromSC
whereSno=
(
selectSno
fromStudent
whereSname='钱横')
15、能删除学号为“98003”的学记录吗如果一定要删除该记录,该如何操作给出操作命令。
不能,图:
先删除SC表中有关98003学生的信息:
deletefromSCwhereSno='98003'
再删除Student表中的记录:
图:
代码:
deletefromStudentwhereSno='98003'
16、删除姓‘张‘的学生的记录。
代码:
更改前:
(查询姓张同学信息)更改后:
select*
fromStudent
whereSnamelike'张%'
17、清空Student与Course两表。
代码:
更改后两表:
具体操作:
先删除sc表消除外键约束
再删除sc表
将TSC表中的数据插入到sc表中
deleteSC
deleteStudent
deleteCourse
droptableSC
select
intoSC
fromTSC;
14、如何又从备份表中恢复所有的三张表。
代码:
droptableStudent
droptableCourse
select*
intoStudent
fromTStudent
select*
intoCourse
fromTCourse
更改后SC表:
更改后Student表: