nullWELCOME TO
数据库 原理及应用WELCOME TO
数据库 原理及应用经济管理学院
齐莉丽
E-mail: qiliru@sina.comnull*5.4 SQL的数据更新功能5.4.1 插入操作
1、插入单个元组
插入操作的语句格式是:
INSERT
INTO <表名> [(<属性列1>[, <属性列2 >…])
VALUES (<常量1> [, <常量2>]…);
但必须注意的是,在表定义时说明了NOT NULL的属性列不能取空值。否则会出错。
null*[例1] 将学生张三的信息插入到Student表中。
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES (‘2000012’, ‘张三', '男', '计算机', 19);
在INTO子句中指出了表名Student,指出了新增加的元组在哪些属性上要赋值,属性的顺序可以与CREATE TABLE中的顺序不一样。VALUES子句对新元组的各属性赋值,其中,字符串常数要用单引号(英文符号)括起来。
null*[例2] 将学生张三的信息插入到Student表中。 INSERT
INTO Student
VALUES (‘2000113’, ‘张三’, ‘男', '计算机', 19 );
注意:
如果INTO子句中没有指明任何列名,则新插入的记录必须在每个属性列上均有值。null*[例3] 在表Course中增加一条记录。
[INSERT
INTO Course(Cno,Cname,Cpno,Ccredit)
VALUES(' 1136 ', ' 离散数学', NULL, 4);
null*符号NULL的含义是赋予该列的值是空值。还可以用下面的语句来表示:
INSERT
INTO Course(Cno,Cname,Ccredit)
VALUES (' 1136 ', ' 离散数学', 4);null*例4:对每一个系,求学生的平均年龄,并把结果存入数据库。
2、插入子查询结果
INSERT
INTO <表名> [(<属性列1>[, <属性列2 >…])
子查询;
CREATE TABLE Deptage
( Sdept CHAR(15),
Avgage SMALLINT);
null* 对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中。
INSERT
INTO Deptage(Sdept, Avgage)
SELECT Sdept, AVG(Sage)
FROM Student
GROUP BY Sdept;
null*5.4.2 修改操作
UPDATE <表名>
SET <列名>=<表达式>[, <列名>=<表达式>]…
[WHERE <条件>];
功能:修改指定表中满足WHERE子句条件的元组。
null*1、修改某一个元组的值
1、[例5] 将学号为2000012的学生的年龄改为18岁。
修改某一个元组的值
1、UPDATE Student
SET Sage=18
WHERE Sno='2000012';改某一个元组的值
null*2、修改多个元组的值[例6] 将所有学生的年龄增加1岁。
UPDATE Student
SET Sage= Sage+1;null*3、带子查询的修改语句UPDATE SC
SET Grade= 0WHERE ‘CS’=
(SELECT Sdept
FROM Student
WHERE Student.Sno=SC.Sno);
3
[例7]将计算机科学系全体学生的成绩置零。null*三、 删除操作
语句的一般格式是:
DELETE FROM <表名>
[WHERE <条件>];
功能:1)从指定表中删除满足WHERE子句条件的所有元组。
2)如果省略WHERE子句,表示删除表中全部元组,但表的定义仍在字典中。即删除的是数据。
null*[例8] 删除学号为2000012的学生记录。DELETE
FROM Student
WHERE Sno='2000012';
该语句的执行过程是首先在表中找到该元组(用顺序扫描或利用索引),将该元组从数据库中清除出去。
null*[例9] 删除所有学生的选课记录。
[DELETE
FROM SC;
这条DELETE语句将使SC成为空表,它删除了SC的所有元组。
null*[例10] 删除计算机科学系所有学生的选课记录。DELETE
FROM SC
WHERE ‘CS’=
(SELECT Sdept
FROM Student
WHERE Student.Sno=SC.Sno);
null* 更新操作与数据库的一致性
增删改操作只能对一个表操作。这会带来一些问
。如删除学号为001的学生,有关其选课信息也应被删除。
下面以删除操作为例null*studentsc工作原理当删除参照表中的元组时,也应检查被参照表中是否存在相应的元组,如果存在,则进行删除操作,以保持数据一致性。null*习题
1、判断:执行INSERT操作时,如果表格中存在定义为NOT NULL的数据列,那么该列的值必须要出现在VALUES的列表中。( )
2、EMP数据库中存在两个表workers_count和workers,请向workers_count中的person_count列插入一个值,其值为workers表的元组行数: 。√INSERT INTO workers_count(person_count) SELECT count(*) FROM workers null3、用下面的SQL语句建立一个基本表:
CREATE TABLE Student
(Sno CHAR (4) NOT NULL,
Sname CHAR (8) NOT NULL,
Sex CHAR (2),
Age SMALLINT)
可以插入到表中的元组是( )A.′5021′,′刘祥′,男,21
B.NULL,′刘祥′,NULL,21
C.′5021′,NULL,男,21
D.′5021′,′刘祥′,NULL,NULL Dnull*5.5 嵌入式SQL
5.6 SQL的数据控制功能