一、创建数据表:

-- 创建test1
CREATE TABLE TEST1
(
    ID NUMBER(8) PRIMARY KEY NOT NULL,
    NAME CHAR(8) NOT NULL,
    AGE NUMBER(8) NULL,
    SEX CHAR(2) NULL 
);
INSERT INTO TEST1 VALUES (1,'鲁班',18,'男');
INSERT INTO TEST1 VALUES (2,'虞姬',27,'女');
INSERT INTO TEST1 VALUES (3,'剑圣',45,'男');
-- 创建test2
CREATE TABLE TEST2
(
    ID NUMBER(8) PRIMARY KEY NOT NULL,
    NAME CHAR(8) NOT NULL,
    AGE NUMBER(8) NULL,
    SEX CHAR(2) NULL,
    HOBBY VARCHAR2(200) NULL
);
INSERT INTO TEST2 VALUES (1,'齐天大圣',12,'男','打妖怪');
INSERT INTO TEST2 VALUES (2,'猪八戒',45,'男','吃货');
INSERT INTO TEST2 VALUES (5,'紫霞仙子',22,'女','至尊宝');
INSERT INTO TEST2 VALUES (6,'哇哈哈',34,'女','睡觉');

二、更新一张表中的某一列的值:

UPDATE TEST1 SET NAME='张三' where id=1;

三、更新一张表中的多列

update exam_record set submit_time='2099-01-01 00:00:00',score=0
where submit_time is null and start_time<'2021-09-01'

四、多表关联更新

update test1 a set a.name=
(select b.name from test2 b where a.id=b.id)

这样的写法是不对的,此写法会将没有匹配上的列更新为空,但是我这里会报错,因为我创建表格的时候限制name是not null,如下图:
在这里插入图片描述
这也进一步说明了后面不加限制条件会将未匹配的列更新为空值,正确的写法:

update test1 set (name,age)=
(select '张三',89 from dual where id=1)
where id=1;

或者多表:

update test1 a set (a.name,a.age)=
(select b.name,b.age from test2 b where a.id=b.id)
where exists (select 1 from test2 c where a.id=c.id);

或者为了更清楚的看明白,可以这样写:

update test1 a set (a.name,a.age)=
(select b.name,b.age from test2 b where a.id=b.id)
where a.id in (select id from test2 );
update test1 a set name=(select replace(b.name,substr(b.name,1,2),'s')
from test1 b where a.id=b.id ) where id=1;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐