数据更新

      数据更新操作的目的是修改表中的数据。

              有三种操作:

                向表中添加若干行数据( INSERT )

                修改表中的数据( UPDATE

                删除表中的若干行数据( DELETE )。

        DBMS 在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则

       举例说明:

        如果表中已经建立了索引,对索引关键字的更新, DBMS 会同时对索引进行更新。

插入数据

      INSERT 支持两种插入数据方式:

        1、插入单个元组

        2、插入子查询结果

      插入单个元组

        插入单个元组语句格式:

INSERT 
INTO <表名>[(<属性列1>[,<属性列2>]…)]
VALUES (<常量1>[,<常量2>]…)
//中括号里面的内容可有可无 

     插入单个元组语句说明:

        功能:

        将新元组插入指定表中。

       INTO 子句说明:

        ■指定插入数据的表名属性列
        ■属性列的顺序可与定义中的顺序不一致
        ■没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致

        ■指定部分属性列:插入的元组在其余属性列上取空值

       VALUES 子句

        ■提供的值(值的个数和类型必须与 INTO 子句匹配

        ■字符串常量必须用单引号括起来

         插入单个元组例1:

        将一个新学生记录(学号:200215128;姓名:陈冬;性别:男;所在系: IS ;
18岁)插入到 Student 表中。

INSERT INTo Student ( Sno , Sname , Ssex , Sdept , Sage )
VALUES (‘200215128’,‘陈冬,‘男'' IS ,18);

        或

 INSERT INTO Student 
 VALUES (‘200215128’,‘陈冬’‘男',18, IS ');

        插入单个元组例2:

        插入一条选课记录(‘200215128,‘1')

 INSERT 
 INTO SC ( Sno , Cno )
 VALUES ('200215128','1');

        插入单个元组练习

        1、向 SC 表中插入一条选课元组。学生201215122选了5号课程,得分89)

 insert into SC values( '201215122','5',89 );

        2、向 Course 表中插入一条元组。8号课程, C 语言,没有先行课,4学分)

insert into Course values( '8','C语言',NULL,4 ); 

        3、对每一个系,求学生的平均年龄,并把结果存入数据库。
        分析:

 CREATE TABLE Deptage ( 
        Sdept CHAR (15),
        Avgage NUMERIC (6,1)
)
 INSERT INTo Deptage ( Sdept , Avgage )
 SELECТ Sdept , AVG ( Sage )
 FROM Student 
 GROUP BY Sdept ;

        4、建立学生选课情况分析表,包括学号、门数和总学分三个属性列,插入每个学生的选修课程门数和总学分
 

create table 学生选课情况分析表(
学号 char (9),
门数 smallint, 
总学分 smallint 
)

insert into 学生选课情况分析表
select sno , count (*), sum ( ccredit )
from sc , course 
where sc . cno = course . cno 
group by sno 

select * from 学生选课情况分析表 

修改数据:修改表中已有的元组(记录)

        语句格式:

UPDATE <表名>
 SET <列名>=<表达式>[,<列名>=<表达式>]…
[ WHERE <条件>];

      修改数据语句说明:

        功能:

        1、修改指定表中满足 WHERE 子句条件的元组

        注:如果省略 WHERE 子句,则修改表中的所有元组

        2、SET 子句中,表达式的值用于修改相应的属性列

        修改数据例1:

        将学生200215121的年龄改为22岁。(修改满足条件的元组

UPDATE Student 
SET Sage = 22 WHERE Sno =‘200215121’

        修改数据例2:

        将所有学生的年龄增加1岁。(修改所有的元组)

UPDATE Student
SET Sage = Sage +1;

        修改数据例3:

        将计算机科学系全体学生的成绩置零。(带有子查询的修改语句) 

UPDATE SC 
SET Grade = 0
WHERE Sno in
( SELETE Sno
  FROM Student
  WHERE Sdept ='CS')

       修改数据练习:

        1、将8号课程改名为“高级语言程序设计”,先行课为6号课程,学分为5学分。

update course 
set cname ='高级语言程序设计’. cpo ='6, ccredit =5 where cno ='8'
select * from course where cno ='8'

        2、将计算机系所有女生成绩提高10%。

update sc 
set grade = grade *1.1
where sno in ( select sno from student where sdept =' CS ' and ssex ='女)

        3、将没有先行课的课程的成绩提高5分。

 update sc 
 set grade = grade +5
 where cno in ( select cno from course where cpno is null )

删除数据(删除元组)

        删除数据语句格式:

DELETE 
FROM <表名>[ WHERE <条件>];

         删除数据语句说明:

               1、删除指定表中满足 WHERE 子句条件的元组。如果 WHERE 省略删除全部元组

               2、有可能破坏参照完整性规则。(级联删除是一种解决办法)

            删除数据语句例1:

                删除学号为200215128的学生记录(删除满足条件的元组)。

DELETE FROM Student WHERE Sno =‘200215128’

            删除数据语句例2:

                删除所有的学生选课记录(删除所有元组)。

DELETE FROM sc 

            删除数据语句例2:

                删除计算机科学系所有学生的选课记录(带子查询的删除语句)。

 DELETE 
 FROM sc 
 WHERE sno in ( SELECT sno 
                FROM student
                WHERE sdept =' CS ')
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐