SQL 中,对基本表的数据操纵功能是指对基本表中数据的插入、修改和删除。
SQL 的数据插人语句INSERT 有两种形式:一种是插入一个元组,另一种是插人子查询结果。
插入单个元组(或记录)的 INSERT
语句用于向表中添加一行数据。可以指定要插入数据的列,如果某些列在语句中未指定,则这些列将采用默认值(如果有设置)或空值(如果列允许空值)。
INSERT 语句的格式为:
INSERT
INTO <表名>[(<列名>,[<列名>... ])]
VALUES (<常量>[,<常量>]... );
示例:向课程表 C
中插入一个新的课程记录。
INSERT
INTO C
VALUES ('09','计算机图形学',3);
示例: 只向选课表 SC
的特定列插入数据。
INSERT
INTO SC(Sno,Cno)
VALUES ('2007111001','09');
子查询不仅可以嵌套在 SELECT 语句中,用以构造父查询的条件,也可以嵌套在INSERT 语句中,用以生成要插入的批量数据。
插入子查询结果的INSERT 语句的格式为:
INSERT
INTO <表名>[(<列名>,[<列名>...])]
子查询;
示例:计算每个班级的平均年龄,并将结果存储到一个新表 Classage
。
先建立一新表 Classage;
CREATE TABLE Classage(
Sclass CHAR(15),
Avgage SMALLINT
);
然后,使用子查询将每个班级的平均年龄计算出来并插入到 Classage
表中。
INSERT INTO Classage (Sclass,Avgage)
SELECT Sclass,AVG(Sage) FROM S
GROUP BY Sclass;
这将计算每个班级的平均年龄,并将班级名和相应的平均年龄插入到 Classage
表中。
在插入数据时,重要的是确保数据的类型和格式与表中定义的列兼容,以及遵守任何完整性约束(例如,不插入 NULL
到不允许 NULL
值的列中)。
SQL 的 UPDATE
语句用于修改表中已存在的数据。
修改数据语句的一般格式为:
UPDATE 表名
SET <列名>=<表达式>[,<列名>= <表达式>] ...
[WHERE 条件];
其功能为修改指定表中满足 WHERE 子句条件的元组。其中 SET 子句给出<表达式>的值用于取代相应的属性列值。如果省略 WHERE 子句,则表示要修改表中的所有元组。
示例: 将学生 2007111001 的年龄改为 21 岁
UPDATE S
SET Sage = 21
WHERE Sno='2007111001';
当需要对表中的多个行进行同样的修改时,可以省略 WHERE
子句,从而对整个表中的所有行进行更新。
示例:将所有学生的年龄增加 1 岁。
UPDATE S
SET Sage = Sage + 1;
在更复杂的情况下,更新操作的条件可能需要基于另一个查询的结果。这时,可以在 UPDATE
语句中嵌套一个子查询。
示例:将计算机科学专业(CS0701
)班级的所有学生的成绩置为 0。
UPDATE SC
SET Grade = 0
WHERE Sno in (
Select SC.Sno from SC,S WHERE SC.Sno = S.Sno AND Sclass = 'CS0701'
);
在使用 UPDATE
语句时,特别需要注意的是,没有正确使用 WHERE
子句可能会导致更多行被更新,甚至是整个表的数据被意外地修改。因此,在对生产数据库执行更新操作之前进行彻底的测试是非常重要的。
SQL 的 DELETE
语句用于从数据库表中删除行。
删除数据语句的一般格式为:
DELETE
FROM <表名>
[WHERE <条件>];
其功能为从指定表中删除满足 WHERE 子句条件的所有元组。如果省略 WHERE 子句,则表示删除表中全部元组。
这种类型的删除用于移除表中特定行的数据。通常通过 WHERE
子句指定特定的条件来定位要删除的行。
示例: 删除课程号为’02’的课程记录。
DELETE
FROM C
WHERE Cno ='02'
当需要从表中删除多个行时,可以省略 WHERE
子句,从而删除表中的所有行。
示例:删除所有选课记录。
DELETE
FROM SC;
在更复杂的情况下,删除操作的条件可能需要基于另一个查询的结果。这时,可以在 DELETE
语句中嵌套一个子查询。
示例:删除所有课程名称为“计算机图形学”的选课记录。
DELETE FROM SC
WHERE Cno IN (
SELECT Cno
FROM C
WHERE Cname = '计算机图形学'
);
在实际应用中,数据库的一致性非常重要。这意味着当您在一个表中进行删除操作时,可能需要在相关联的表中进行相应的删除,以保持数据的完整性。
示例:删除学生 2007111001
及其所有选课记录。
删除学生 2007111001:
DELETE
FROM S
WHERE Sno ='2007111001';
删除学生 2007111001 的选课记录:
DELETE
FROM SC
WHERE Sno ='2007111001';
在实际的数据库设计中,通常会利用外键约束和级联删除来自动管理这种一致性,以减少手动维护的负担。