国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle?Database?23c新特性之關(guān)聯(lián)更新和刪除示例詳解

瀏覽:78日期:2023-09-22 20:54:42
目錄示例表關(guān)聯(lián)更新關(guān)聯(lián)刪除

Oracle database 23c 開始支持在 UPDATE 和 DELETE 語句中使用 JOIN 連接,獲取更新和刪除的數(shù)據(jù)源。

示例表

本文使用示例表可以通過 GitHub 下載,然后基于 employee 表創(chuàng)建一個 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 字段全部設(shè)置為 0,用于驗(yàn)證關(guān)聯(lián)更新。

關(guān)聯(lián)更新

我們首先查看一下 emp_devp 中的數(shù)據(jù):

SELECT emp_id, emp_name, salary, bonus, emailFROM emp_devpORDER 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|關(guān)平 | 0.00| |guanping@shuguo.com| 12|趙氏 | 0.00| |zhaoshi@shuguo.com | 13|關(guān)興 | 0.00| |guanxing@shuguo.com| 14|張苞 | 0.00| |zhangbao@shuguo.com| 15|趙統(tǒng) | 0.00| |zhaotong@shuguo.com| 16|周倉 | 0.00| |zhoucang@shuguo.com| 17|馬岱 | 0.00| |madai@shuguo.com |

然后我們通過 emp_id 字段關(guān)聯(lián) employee 表更新 emp_devp 中的數(shù)據(jù),包括 salary、bonus 以及 email,數(shù)據(jù)來自 employee。

UPDATE emp_devp edSET ed.salary = e.salary, ed.bonus = e.bonus, ed.email = e.emailFROM employee e WHERE e.emp_id = ed.emp_id;

Oracle 使用了 UPDATE FROM 語法實(shí)現(xiàn)關(guān)聯(lián)更新,其他數(shù)據(jù)庫可能使用 UPDATE JOIN 語法。

現(xiàn)在我們查看一下更新后的 emp_devp 數(shù)據(jù):

SELECT emp_id, emp_name, salary, bonus, emailFROM emp_devpORDER 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|關(guān)平 | 6800.00| |guanping@shuguo.com| 12|趙氏 | 6600.00| |zhaoshi@shuguo.com | 13|關(guān)興 | 7000.00| |guanxing@shuguo.com| 14|張苞 | 6500.00| |zhangbao@shuguo.com| 15|趙統(tǒng) | 6000.00| |zhaotong@shuguo.com| 16|周倉 | 8000.00| |zhoucang@shuguo.com| 17|馬岱 | 5800.00| |madai@shuguo.com |

在此之前的版本中,我們可以使用子查詢或者 MERGE 語句實(shí)現(xiàn)相同的效果:

UPDATE emp_devp edSET (salary, bonus, email) = (SELECT salary, bonus, email FROM employee e WHERE e.emp_id = ed.emp_id)WHERE EXISTS (SELECT 1 FROM employee e WHERE e.emp_id = ed.emp_id);MERGE INTO emp_devp edUSING employee eON (e.emp_id = ed.emp_id)WHEN MATCHED THEN UPDATE SET ed.salary = e.salary, ed.bonus = e.bonus, ed.email = e.email;

如果更新操作的數(shù)據(jù)源來自多個表,可以通過 JOIN 將它們進(jìn)行連接。以下示例增加了 job 表作為數(shù)據(jù)更新的來源:

UPDATE emp_devp edSET ed.salary = e.salary, ed.bonus = e.bonus, ed.email = e.emailFROM 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 中職位名稱為“程序員”的員工信息。

關(guān)聯(lián)刪除

我們同樣可以基于 employee 中的數(shù)據(jù)刪除 emp_devp 中的員工。以下示例使用 emp_id 作為兩個表的關(guān)聯(lián)字段,同時還增加了一個額外的過濾條件:

DELETE emp_devp edFROM employee eWHERE ed.emp_id = e.emp_idAND e.salary < 10000;

查看 emp_devp 中的數(shù)據(jù):

SELECT emp_id, emp_name, salary, bonus, emailFROM emp_devpORDER BY emp_id;EMP_ID|EMP_NAME|SALARY|BONUS|EMAIL |------+--------+------+-----+------------------+ 9|趙云 | 15000| 6000|zhaoyun@shuguo.com|

如果刪除操作的數(shù)據(jù)源來自多個表,可以通過 JOIN 將它們進(jìn)行連接。以下示例增加了 job 表作為數(shù)據(jù)刪除的來源:

DELETE emp_devp edFROM employee eJOIN job j ON j.job_id = e.job_idWHERE ed.emp_id = e.emp_idAND j.job_title = '開發(fā)經(jīng)理';

到此這篇關(guān)于Oracle Database 23c新特性之關(guān)聯(lián)更新和刪除的文章就介紹到這了,更多相關(guān)Oracle Database 23c內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Oracle 數(shù)據(jù)庫
主站蜘蛛池模板: 宜宾县| 大姚县| 洛阳市| 深水埗区| 额敏县| 高要市| 诸城市| 和平区| 万安县| 闽清县| 正定县| 阿拉尔市| 墨玉县| 和平区| 荥阳市| 大安市| 商城县| 凤冈县| 九台市| 思茅市| 临颍县| 波密县| 甘肃省| 开原市| 博野县| 遂昌县| 上杭县| 寿阳县| 永德县| 仁化县| 宣城市| 白沙| 汉川市| 连南| 蒙阴县| 丰顺县| 巴青县| 盐津县| 江门市| 志丹县| 邯郸县|