【数据库原理】(12)SQL数据操纵功能

SQL 中,对基本表的数据操纵功能是指对基本表中数据的插入、修改和删除。

一.插入数据

SQL 的数据插人语句INSERT 有两种形式:一种是插入一个元组,另一种是插人子查询结果。

1.插入单个元组

插入单个元组(或记录)的 INSERT 语句用于向表中添加一行数据。可以指定要插入数据的列,如果某些列在语句中未指定,则这些列将采用默认值(如果有设置)或空值(如果列允许空值)。

INSERT 语句的格式为:

SQL 复制代码
INSERT
INTO <表名>[(<列名>,[<列名>... ])]
VALUES (<常量>[,<常量>]... );

示例 :向课程表 C 中插入一个新的课程记录。

SQL 复制代码
INSERT
INTO C
VALUES ('09','计算机图形学',3);

示例 : 只向选课表 SC 的特定列插入数据。

SQL 复制代码
INSERT
INTO SC(Sno,Cno)
VALUES ('2007111001','09');

2.插入子查询结果

子查询不仅可以嵌套在 SELECT 语句中,用以构造父查询的条件,也可以嵌套在INSERT 语句中,用以生成要插入的批量数据。

插入子查询结果的INSERT 语句的格式为:

SQL 复制代码
INSERT
INTO <表名>[(<列名>,[<列名>...])]
子查询;

示例 :计算每个班级的平均年龄,并将结果存储到一个新表 Classage

先建立一新表 Classage;

SQL 复制代码
CREATE TABLE Classage(
Sclass CHAR(15),
Avgage SMALLINT
);

然后,使用子查询将每个班级的平均年龄计算出来并插入到 Classage 表中。

SQL 复制代码
INSERT INTO Classage (Sclass,Avgage)
SELECT Sclass,AVG(Sage) FROM S
GROUP BY Sclass;

这将计算每个班级的平均年龄,并将班级名和相应的平均年龄插入到 Classage 表中。

在插入数据时,重要的是确保数据的类型和格式与表中定义的列兼容,以及遵守任何完整性约束(例如,不插入 NULL 到不允许 NULL 值的列中)。

二.修改数据

SQL 的 UPDATE 语句用于修改表中已存在的数据。

修改数据语句的一般格式为:

SQL 复制代码
UPDATE 表名
SET <列名>=<表达式>[,<列名>= <表达式>] ...
[WHERE 条件];

其功能为修改指定表中满足 WHERE 子句条件的元组。其中 SET 子句给出<表达式>的值用于取代相应的属性列值。如果省略 WHERE 子句,则表示要修改表中的所有元组。

1.修改某一个元组的值

示例: 将学生 2007111001 的年龄改为 21 岁

SQL 复制代码
UPDATE S
SET Sage = 21
WHERE Sno='2007111001';

2.修改多个元组的值

当需要对表中的多个行进行同样的修改时,可以省略 WHERE 子句,从而对整个表中的所有行进行更新。

示例:将所有学生的年龄增加 1 岁。

SQL 复制代码
UPDATE S
SET Sage = Sage + 1;

3.带子查询的修改语句

在更复杂的情况下,更新操作的条件可能需要基于另一个查询的结果。这时,可以在 UPDATE 语句中嵌套一个子查询。

示例 :将计算机科学专业(CS0701)班级的所有学生的成绩置为 0。

SQL 复制代码
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 语句用于从数据库表中删除行。

删除数据语句的一般格式为:

SQL 复制代码
DELETE
FROM <表名>
[WHERE <条件>];

其功能为从指定表中删除满足 WHERE 子句条件的所有元组。如果省略 WHERE 子句,则表示删除表中全部元组。

1.删除某个元组的值

这种类型的删除用于移除表中特定行的数据。通常通过 WHERE 子句指定特定的条件来定位要删除的行。

示例: 删除课程号为'02'的课程记录。

SQL 复制代码
DELETE
FROM C
WHERE Cno ='02'

2.删除多个元组的值

当需要从表中删除多个行时,可以省略 WHERE 子句,从而删除表中的所有行。

示例:删除所有选课记录。

SQL 复制代码
DELETE
FROM SC;

3.带子查询的删除语句

在更复杂的情况下,删除操作的条件可能需要基于另一个查询的结果。这时,可以在 DELETE 语句中嵌套一个子查询。

示例:删除所有课程名称为"计算机图形学"的选课记录。

SQL 复制代码
DELETE FROM SC
WHERE Cno IN (
    SELECT Cno
    FROM C
    WHERE Cname = '计算机图形学'
);

4.更新操作与数据库的一致性

在实际应用中,数据库的一致性非常重要。这意味着当您在一个表中进行删除操作时,可能需要在相关联的表中进行相应的删除,以保持数据的完整性。

示例 :删除学生 2007111001 及其所有选课记录。

删除学生 2007111001:

SQL 复制代码
DELETE
FROM S
WHERE Sno ='2007111001';

删除学生 2007111001 的选课记录:

SQL 复制代码
DELETE
FROM SC
WHERE Sno ='2007111001';

在实际的数据库设计中,通常会利用外键约束和级联删除来自动管理这种一致性,以减少手动维护的负担。

相关推荐
高兴就好(石1 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆1 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0662 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
码农郁郁久居人下2 小时前
Redis的配置与优化
数据库·redis·缓存
MuseLss3 小时前
Mycat搭建分库分表
数据库·mycat
Hsu_kk3 小时前
Redis 主从复制配置教程
数据库·redis·缓存
DieSnowK4 小时前
[Redis][环境配置]详细讲解
数据库·redis·分布式·缓存·环境配置·新手向·详细讲解
程序猿小D4 小时前
第二百三十五节 JPA教程 - JPA Lob列示例
java·数据库·windows·oracle·jdk·jpa
Flerken1014 小时前
数据库语言、SQL语言、数据库系统提供的两种语言
数据库·sql·oracle
掘根4 小时前
【网络】高级IO——poll版本TCP服务器
网络·数据库·sql·网络协议·tcp/ip·mysql·网络安全