Oracle Database 23c新特性之关联更新和删除

news/2025/1/8 1:59:51/

Oracle database 23c 开始支持在 UPDATE 和 DELETE 语句中使用 JOIN 连接,获取更新和删除的数据源。

示例表

本文使用示例表可以通过 GitHub 下载,然后基于 employee 表创建一个 emp_devp:

CREATE TABLE emp_devp 
AS 
SELECT * FROM employee e 
WHERE dept_id = 4; UPDATE emp_devp 
SET salary = 0;
COMMIT;

emp_devp 中的 salary 字段全部设置为 0,用于验证关联更新。

关联更新

我们首先查看一下 emp_devp 中的数据:

SELECT emp_id, emp_name, salary, bonus, email
FROM emp_devp
ORDER BY emp_id;emp_id|emp_name|salary|bonus  |email              |
------+--------+------+-------+-------------------+9|赵云     |  0.00|6000.00|zhaoyun@shuguo.com |10|廖化     |  0.00|       |liaohua@shuguo.com |11|关平     |  0.00|       |guanping@shuguo.com|12|赵氏     |  0.00|       |zhaoshi@shuguo.com |13|关兴     |  0.00|       |guanxing@shuguo.com|14|张苞     |  0.00|       |zhangbao@shuguo.com|15|赵统     |  0.00|       |zhaotong@shuguo.com|16|周仓     |  0.00|       |zhoucang@shuguo.com|17|马岱     |  0.00|       |madai@shuguo.com   |

然后我们通过 emp_id 字段关联 employee 表更新 emp_devp 中的数据,包括 salary、bonus 以及 email,数据来自 employee。

UPDATE emp_devp ed
SET ed.salary = e.salary,ed.bonus = e.bonus, ed.email = e.email
FROM employee e 
WHERE e.emp_id = ed.emp_id;

Oracle 使用了 UPDATE FROM 语法实现关联更新,其他数据库可能使用 UPDATE JOIN 语法。

现在我们查看一下更新后的 emp_devp 数据:

SELECT emp_id, emp_name, salary, bonus, email
FROM emp_devp
ORDER BY emp_id;emp_id|emp_name|salary  |bonus  |email              |
------+--------+--------+-------+-------------------+9|赵云     |15000.00|6000.00|zhaoyun@shuguo.com |10|廖化     | 6500.00|       |liaohua@shuguo.com |11|关平     | 6800.00|       |guanping@shuguo.com|12|赵氏     | 6600.00|       |zhaoshi@shuguo.com |13|关兴     | 7000.00|       |guanxing@shuguo.com|14|张苞     | 6500.00|       |zhangbao@shuguo.com|15|赵统     | 6000.00|       |zhaotong@shuguo.com|16|周仓     | 8000.00|       |zhoucang@shuguo.com|17|马岱     | 5800.00|       |madai@shuguo.com   |

在此之前的版本中,我们可以使用子查询或者 MERGE 语句实现相同的效果:

UPDATE emp_devp ed
SET (salary, bonus, email) = (SELECT salary, bonus, emailFROM employee e WHERE e.emp_id = ed.emp_id)
WHERE EXISTS (SELECT 1FROM employee eWHERE e.emp_id = ed.emp_id);MERGE INTO emp_devp ed
USING employee e
ON (e.emp_id = ed.emp_id)
WHEN MATCHED THEN UPDATE SET ed.salary = e.salary,ed.bonus = e.bonus,ed.email = e.email;

如果更新操作的数据源来自多个表,可以通过 JOIN 将它们进行连接。以下示例增加了 job 表作为数据更新的来源:

UPDATE emp_devp ed
SET ed.salary = e.salary,ed.bonus = e.bonus, ed.email = e.email
FROM employee e 
JOIN job j ON (e.job_id = j.job_id AND j.job_title = '程序员')
WHERE e.emp_id = ed.emp_id;

以上语句只会更新 emp_devp 中职位名称为“程序员”的员工信息。

关联删除

我们同样可以基于 employee 中的数据删除 emp_devp 中的员工。以下示例使用 emp_id 作为两个表的关联字段,同时还增加了一个额外的过滤条件:

DELETE emp_devp ed
FROM employee e
WHERE ed.emp_id = e.emp_id
AND e.salary < 10000;

查看 emp_devp 中的数据:

SELECT emp_id, emp_name, salary, bonus, email
FROM emp_devp
ORDER BY emp_id;EMP_ID|EMP_NAME|SALARY|BONUS|EMAIL             |
------+--------+------+-----+------------------+9|赵云     | 15000| 6000|zhaoyun@shuguo.com|

如果删除操作的数据源来自多个表,可以通过 JOIN 将它们进行连接。以下示例增加了 job 表作为数据删除的来源:

DELETE emp_devp ed
FROM employee e
JOIN job j ON j.job_id = e.job_id
WHERE ed.emp_id = e.emp_id
AND j.job_title = '开发经理';

http://www.ppmy.cn/news/128350.html

相关文章

诺华制药:一家被低估的瑞士制药巨头

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 关于诺华制药 诺华制药&#xff08;NVS&#xff09;是一家全球性的医疗健康公司&#xff0c;主要专注于处方药和仿制药的研究。诺华制药还开发、生产和销售有广泛的药物产品&#xff0c;如呼吸和心血管疾病、免疫学、神经科…

飞思卡尔电机驱动

这是一个电机驱动的原理图 在读懂这张图之前&#xff0c;我们先了解H桥式驱动电路导通原理 假设电机正转的时候&#xff0c;Q9与Q12会导通&#xff0c;Q10与Q11截至 反转的时候&#xff0c;Q10与Q11导通&#xff0c;Q9与Q12截至。 然后回到原理图里&#xff0c;为了让电机…

超高性能、7*24持续运行SECS GEM,SEMI E4,E5, E30,E37,E39,E40

1 .符合SEMI E4,E5,E37 的 SECS 通讯规范 2. 提供每秒100-1000次 Transaction 的通讯能力&#xff0c;高性能多线程并发处理Transaction 3. 提供 DLL 元件供程式设计者使用 4. 快速 Encode 与 Decode Big Message 5. 提供 Log 档案可查询历史通讯记录 6 .支援VC、C#等程式语言&…

艾利特EC63机器人坐标系与轴操作

一、关节坐标系 艾利特EC63机器人沿各轴轴线进行单独动作&#xff0c;所使⽤的坐标系成为关节坐标系。关节坐标系在机器人调试完成后就设定完成&#xff0c;不可更改。二、直⻆坐标系 艾利特EC63机器人直⻆坐标系也叫大地坐标系。每种机器人类型对应的直⻆坐标系⽅…

ELF

目录 一&#xff0c;目标文件格式 二&#xff0c;ELF 1&#xff0c;分段 2&#xff0c;工具 3&#xff0c;查看目标文件内容 一&#xff0c;目标文件格式 编译链接 https://blog.csdn.net/nameofcsdn/article/details/116654835 目标文件和可执行文件的逻辑结构是类似的…

433M无线串口E30-TTL-100在农业物联网上的应用

一、无线串口模块在农业物联网上的应用背景 智能农业&#xff0c;是通信、计算机和农学等若干学科和领域共同发展&#xff0c;并相互结合所形成的产物&#xff0c;它将信息采集、传输、处理和控制集成在一起&#xff0c;使人们更容易获得农作物生长各个阶段的各类信息&#xf…

L3-025 那就别担心了

下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题&#xff0c;其实都不用担心。 博主将这种逻辑推演称为“逻辑自洽”&#xff0c;即从某个命题出发的所有推理路径都会将结论引导到同一个最终命题&#xff08;开玩笑的&#xff0c;千万别以为这是真正的逻…

最早walkman android,入手一年,聊聊索尼 ZX505、艾利和SR15 两款安卓播放器使用体验...

大家好&#xff0c;我是太空橘子。 自从上初中的时候&#xff0c;收到了姐姐送我的第一台音乐播放器——Walkman NW-A815&#xff0c;就爱上了音乐&#xff0c;就像「痛苦的信仰」乐队的《不要停止我的音乐》歌名一样那般热爱。从此之后&#xff0c;便也陆陆续续购买了多款Walk…