【数据库原理】(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';

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

相关推荐
superman超哥26 分钟前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
engchina1 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina1 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j
尘浮生1 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
威哥爱编程1 小时前
SQL Server 数据太多如何优化
数据库·sql·sqlserver
小华同学ai1 小时前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
Acrelhuang2 小时前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
十叶知秋2 小时前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
瓜牛_gn4 小时前
mysql特性
数据库·mysql
奶糖趣多多5 小时前
Redis知识点
数据库·redis·缓存