3. SQL 中基本表更新

基本表更新

1. 插入数据 – INSERT INTO

1.1 插入元组

格式

NSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]    …           )

INTO子句

  • 属性列的顺序可与表定义中的顺序不一致
  • 没有指定属性列
  • 指定部分属性列

VALUES子句

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

【例】将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。

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

【例】 将学生张成民的信息插入到Student表中。

INSERT
INTO  Student
VALUES ('200215126', '张成民', '男',18,'CS');

【例】插入一条选课记录( ‘200215128’,’1 ‘)。

INSERT
INTO SC(Sno,Cno)//RDBMS将在新插入记录的Grade列上自动地赋空值
VALUES ('200215128','1');
//等价
INSERT
INTO SC
VALUES ('200215128','1',NULL);

1.2 插入子查询结果

格式

INSERT
INTO <表名>  [(<属性列1> [,<属性列2>…  )]
子查询;

INTO子句(与插入元组类似)

子查询

  • SELECT子句目标列必须与INTO子句匹配
  • 值的个数
  • 值的类型

【例】对每一个系,求学生的平均年龄,并把结果存入数据库。

第一步:建表

CREATE  TABLE  Dept_age(
Sdept  CHAR(15),       /* 系名*/
Avg_age SMALLINT		  /*学生平均年龄*/
);

第二步:插入数据

INSERT INTO  Dept_age(Sdept,Avg_age)
SELECT  Sdept,AVG(Sage)
FROM  Student
GROUP BY Sdept;

2. 修改数据 – UPDATE SET

** 语句格式**

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

** SET 子句**

  • 指定修改方式
  • 要修改的列
  • 修改后取值

WHERE子句

  • 指定要修改的元组
  • 缺省表示要修改表中的所有元组

** 三种修改方式**

  • 修改某一个元组的值
  • 修改多个元组的值
  • 带子查询的修改语句

【例】将学生201215121的年龄改为22岁。

UPDATE  Student
SET Sage=22
WHERE  Sno='201215121';

【例】将所有学生的年龄增加1岁。

UPDATE Student
SET Sage= Sage+1;

【例】将计算机科学系全体学生的成绩置零。

UPDATE SC
SET  Grade=0
WHERE  'CS'=(
            SELECT  Sdept
            FROM  Student
            WHERE  Student.Sno = SC.Sno
        );

3. 删除数据 –DELETE

三种删除方式
删除某一个元组的值
删除多个元组的值
带子查询的删除语句

【例】删出学号为 200215128 的学生。

DELETE
FROM Student
WHERE Sno= '200215128';

【例】删除所有的学生选课记录。

    DELETE
    FROM SC;/

【例】删除计算机科学系所有学生的选课记录。

DELETE
FROM SC
WHERE  'CS'=(
               SELECT Sdept
               FROM Student
               WHERE Student.Sno=SC.Sno
           );

3. SQL 中基本表更新
http://yuukichen.github.io/2024/07/05/sql中基本表的更新/
Author
Yuukichen
Posted on
July 5, 2024
Licensed under