欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2023年06月02日 14:36:28   作者:不剪發(fā)的Tony老師  
這篇文章主要介紹了Oracle?Database?23c新特性之關(guān)聯(lián)更新和刪除的相關(guān)資料,Oracle database 23c開始支持在UPDATE和DELETE語句中使用JOIN連接,獲取更新和刪除的數(shù)據(jù)源,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

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, 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|關(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 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 語法實(shí)現(xiàn)關(guān)聯(lián)更新,其他數(shù)據(jù)庫可能使用 UPDATE JOIN 語法。

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

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|關(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 ed
SET (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 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;

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

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 中職位名稱為“程序員”的員工信息。

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

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

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

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

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|

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

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 = '開發(fā)經(jīng)理';

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

相關(guān)文章

  • oracle合并列的函數(shù)wm_concat的使用詳解

    oracle合并列的函數(shù)wm_concat的使用詳解

    本篇文章是對oracle合并列的函數(shù)wm_concat的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Oracle中的SUM用法講解

    Oracle中的SUM用法講解

    今天小編就為大家分享一篇關(guān)于Oracle中的SUM用法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Oracle中如何處理空值函數(shù)(NVL、NVL2、NULLIF等)詳解

    Oracle中如何處理空值函數(shù)(NVL、NVL2、NULLIF等)詳解

    本文詳細(xì)介紹了Oracle數(shù)據(jù)庫中處理空值的常用函數(shù),包括NVL()、NVL2()、NULLIF()、COALESCE()及DECODE()和CASE()函數(shù),這些函數(shù)在數(shù)據(jù)庫查詢和數(shù)據(jù)處理中發(fā)揮重要作用,幫助開發(fā)者有效處理空值問題,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • navicat使用Oracle創(chuàng)建庫以及用戶超詳細(xì)教程

    navicat使用Oracle創(chuàng)建庫以及用戶超詳細(xì)教程

    本文介紹如何使用Navicat連接Oracle數(shù)據(jù)庫,步驟包括準(zhǔn)備工作、新建連接、輸入用戶名和密碼、測試連接、建立庫和用戶、授權(quán)以及測試的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • Linux中Oracle安裝后bash:?sqlplus:?command?not?found問題解決方法

    Linux中Oracle安裝后bash:?sqlplus:?command?not?found問題解決方法

    這篇文章主要給大家介紹了關(guān)于Linux中Oracle安裝后bash:?sqlplus:?command?not?found問題的解決方法,這是因?yàn)槟愕南到y(tǒng)中沒有安裝Oracle數(shù)據(jù)庫客戶端或者其可執(zhí)行文件路徑未配置到,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 詳解Oracle 中實(shí)現(xiàn)數(shù)據(jù)透視表的幾種方法

    詳解Oracle 中實(shí)現(xiàn)數(shù)據(jù)透視表的幾種方法

    這篇文章主要介紹了詳解Oracle 中實(shí)現(xiàn)數(shù)據(jù)透視表的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Oracle數(shù)據(jù)庫集復(fù)制方法淺議

    Oracle數(shù)據(jù)庫集復(fù)制方法淺議

    Oracle數(shù)據(jù)庫集復(fù)制方法淺議...
    2007-03-03
  • Linux下修改Oracle監(jiān)聽地址的方法

    Linux下修改Oracle監(jiān)聽地址的方法

    這篇文章主要介紹了Linux下修改Oracle監(jiān)聽地址的方法,需要的朋友可以參考下
    2017-10-10
  • Oracle占用內(nèi)存過高的問題及解決

    Oracle占用內(nèi)存過高的問題及解決

    這篇文章主要介紹了Oracle占用內(nèi)存過高的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Oracle數(shù)據(jù)庫在指定字段后新增字段代碼舉例

    Oracle數(shù)據(jù)庫在指定字段后新增字段代碼舉例

    很多時候數(shù)據(jù)庫中已有表的字段與需求業(yè)務(wù)所需字段有差異,需要增加一個或多個字段,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫在指定字段后新增字段的相關(guān)資料,需要的朋友可以參考下
    2023-09-09

最新評論