实验三 数据更新
一、实验目的
熟悉数据库的数据更新操作,能够使用SQL语句对数据库进行数据的插入、修改、删除操作。
二、实验内容和要求
1.插入
2.修改
3.删除
要求:理解和掌握INSERT、UPDATE和DELETE语法结构的各个主成成分,结合嵌套SQL子查询,分别设计几种不同形式的插入、修改和删除数据的语句并调试成功。
三、实验过程
1.准备实验数据
创建数据库s_t和spj,创建学生表student、课程表course、选修表sc、供应商表s、零件表p、工程项目表j、供应情况表spj,向表中添加适量数据。
2.练习教材第3章【例3.69】——【例3.83】(这一部分内容不用写入实验报告)
3.在spj数据库中,完成教材第3章习题5中的(8)—(11)
08
UPDATE p
SET color='蓝'
WHERE color='红';
09
UPDATE spj
SET sno='s3'
WHERE sno='s5' AND jno='j4' AND pno='p6';
10
DELETE FROM spj WHERE sno='s2';
DELETE FROM s WHERE sno='s2'; 顺序不可换
11
INSERT
INTO spj
VALUES(s2,j6,p4,200);
4.在s_t数据库中,完成以下操作
(1)创建一个新表stu_avg,然后将学生的学号,姓名和所选修课程的平均成绩插入新表中。
创建表:
CREATE TABLE stu_avg
(sno char(9) PRIMARY KEY,
sname char(20) UNIQUE,
avg_grade SMALLINT);
插入数据:
INSERT
INTO stu_avg
SELECT student.sno,sname,AVG(grade)
FROM student,sc
WHERE student.Sno=sc.Sno
GROUP BY Sno;
(2)将“数据库”这门课程的成绩提高10%。
UPDATE sc
SET Grade=Grade*1.1
WHERE Cno IN
( SELECT cno
FROM course
WHERE cname='数据库');
(3)删除学生“李勇”的全部信息(包括选课情况)。
第一步:
DELETE
FROM sc
WHERE sno IN
(SELECT sno
FROM student
WHERE sname='李勇');
第二步:
DELETE
FROM student
WHERE sname='李勇';
(4)创建一个新表stu_credit,表中包含sno(学号)和credit(总学分)两个属性,然后统计每个学生的总学分并存入该表。(课程成绩大于等于60分才可获得相应学分,未取得任何学分的学生总学分为0)。
创建表:
CREATE TABLE stu_credit
(sno char(9) PRIMARY KEY,
sum_credit SMALLINT);
插入数据:
INSERT
INTO stu_credit
SELECT student.sno,SUM(Ccredit)
FROM sc,course,student
WHERE sc.Grade>=60 AND sc.Sno=student.Sno AND
sc.Cno=course.Cno
GROUP BY Sno;
更新数据:
UPDATE stu_credit
SET sum_credit=0
WHERE sum_credit IS NULL;
四、实验总结
使用insert完成数据插入;使用update完成数据更新;使用delete完成数据删除
删除数据时要注意删除顺序,要考虑外键等约束因素,一般都会有固定的顺序,不能随便删 。
在4—(4)题中,当向表中存储完数据后会发现有sum_credit为NULL的,所以,要对数据进行一个更新,将sum_credit为NULL的改为sum_credit=0。