文档介绍:第三章关系数据库标准语言SQL
SQL概述
数据定义
查询
数据更新
视图
数据控制
嵌入式SQL
数据更新
一、插入数据
二、修改数据
三、删除数据
一、插入数据
(1) 插入单个元组--新元组插入指定表中。
语句格式:
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>] …) ;
INTO子句
指定要插入数据的表名及属性列
属性列的顺序可与表定义中的顺序不一致
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
指定部分属性列:插入的元组在其余属性列上取空值
VALUES子句
提供的值的个数和值的类型必须与INTO子句匹配
一、插入数据
[例1] 将一个新学生记录( 学号: 95020; 姓名: 陈冬; 性别: 男; 所在系: IS; 年龄: 18岁) 插入到Student表中。
INSERT
INTO Student
VALUES ( '95020' , '陈冬' , '男' , 'IS' , 18) ;
[例2] 插入一条选课记录( ‘95020’,‘1’)。
INSERT
INTO SC(o)
VALUES ('95020 ','1') ;
注:新插入的记录在Grade列上取空值。
一、插入数据
(2) 插入子查询结果
语句格式:
INSERT
INTO <表名> [(<属性列1> [,<属性列2>…)]
子查询;
INTO子句(与插入单条元组类似)
指定要插入数据的表名及属性列
属性列的顺序可与表定义中的顺序不一致
没有指定属性列:表示要插入的是一条完整的元组
指定部分属性列:插入的元组在其余属性列上取空值
子查询
SELECT子句目标列属性的个数和类型必须与INTO子句匹配。
一、插入数据
[例3] 对每一个系,求学生的平均年龄,并把结果存入数据库。
第一步:建表
CREATE TABLE Deptage
( Sdept CHAR(15) , /* 系名*/
Avgage SMALLINT ) ; /*学生平均年龄*/
第二步:插入数据
INSERT
INTO Deptage( Sdept, Avgage)
SELECT Sdept, AVG(Sage)
FROM Student
GROUP BY Sdept ;
一、插入数据
DBMS在执行插入语句时会检查欲插入的元组是否会破坏表上已定义的完整性规则。如果破坏,系统会提示,且该记录不会被插入到数据库中。
实体完整性
对于插入的记录主码不为空且不可以与表中已有记录主码相同。
参照完整性
外码必须取空值或被参照关系中对应属性的值。
用户定义的完整性
对于有NOT NULL约束的属性列是否提供了非空值
对于有UNIQUE约束的属性列是否提供了非重复值
对于有值域约束的属性列所提供的属性值是否在值域范围内
二、修改数据
语句格式:
UPDATE <表名>
SET <列名>=<表达式>[, <列名>=<表达式>]…
[WHERE <条件>];
功能:
修改指定表中满足WHERE子句条件的元组。
注:
SET子句--指定修改方式,要修改的列和修改后取值
WHERE子句
指定要修改的元组
缺省表示要修改表中的所有元组
二、修改数据
(1) 用WHERE子句指定修改单个记录
[例4] 将学生95001的年龄改为22岁。
UPDATE Student
SET Sage = 22
WHERE Sno = '95001' ;
(2) 用WHERE子句(或不用)指定修改多个记录
[例5] 将所有学生的年龄增加1岁。
UPDATE Student
SET Sage = Sage+1;
[例6] 将信息系所有学生的年龄增加1岁。
UPDATE Student
SET Sage = Sage+1
WHERE Sdept = 'IS' ;
二、修改数据
(3) 用子查询指定要修改的记录
[例7] 将计算机科学系全体学生的成绩置零。
UPDATE SC
SET Grade=0
WHERE 'CS'=
( SELECT Sdept
FROM Student
WHERE = ) ;