
SQL更新操作是修改数据库中现有数据记录的关键,主要包括单表更新和基于子查询的多表更新两种方式。掌握它们不仅能提高数据维护效率,还能减少不必要的系统开销。
单表更新
语法:
UPDATE 表名 SET 列=值 [, 列=值]... [WHERE 条件]
示例说明:
SELECT * FROM test:查看test表的所有数据。
UPDATE test SET sex=111:将test表的整个sex列更新为111。
UPDATE test SET sex=333 WHERE AAA=7:仅更新test表中满足AAA=7的记录的sex列。
多表更新(子查询更新)
当需要将一列的值更新为另一表对应的值时,使用子查询更新可以有效减少数据I/O,提高效率。
例如,将test表的sal列更新为emp表的sal列值:
若用普通方法,需先查询emp表,再更新test表,步骤繁琐且效率较低。
而用子查询可直接完成,但需注意子查询返回多行会报错。
示例与修正:
错误示例:UPDATE test SET sal=(SELECT sal FROM emp)
会因单行子查询返回多行而报错。
正确用法示例:
-- 将test表所有sal列更新为emp表中第一条记录的sal值 UPDATE test SET sal=(SELECT sal FROM emp WHERE ROWNUM=1)
-- 将test表中AAA=8的sal更新为emp表第16行的sal值 UPDATE test SET sal=( SELECT sal FROM ( SELECT ROWNUM r, sal FROM emp ) WHERE r=16 ) WHERE AAA=8
此更新分三步执行:
从emp表中选取行号和sal列。
筛选出第16行的sal值。
赋值给满足条件的test表记录。
通过子查询更新,可以灵活、高效地处理跨表数据同步任务,是优化数据库操作的重要手段。