2023-11-24--oracle--實驗--[Merge 語句]

?

oracle--實驗---Merge語句

1.認知Merge? 語句

? merge 語句是 sql 語句的一種。在 SQL server Oracle 數據庫中可用, MySQL 中不可用。
? merge 用來合并 update insert 語句。目的:通過 merge 語句,根據一張表( 原數據表, source table 對另外一張( 目標表, target table 表進行查詢,連接條件 匹配上 的進行 update 無法匹配 的執行 INSERT 。這個語法僅需要一次全表掃描就完成了全部工作,執行效率要高于 insert+update
? 何為匹配,何為不匹配?

?

/*示例程序塊2?? 重要*/

/*示例程序塊2   重要*/DECLAREv_xm varchar2(8):='Jame';v_zym varchar2(10):='計算機';v_zxf number(2):=45;    /*定義變量類型*/BEGINUPDATE XS  SET zxf=v_zxfWHERE xm=v_xm;IF SQL%NOTFOUND THENDBMS_OUTPUT.PUT_LINE('沒有該人,需要插入該人');INSERT INTO XS(XH,XM,ZYM,ZXF)          VALUES('007',v_xm,v_zym,v_zxf);END IF;
end;      

Merge應用場合

構建平臺
create table PRODUCTS(PRODUCT_ID             INTEGER,PRODUCT_NAME      VARCHAR2(60),CATEGORY                VARCHAR2(60));create table NEWPRODUCTS(PRODUCT_ID                 INTEGER,PRODUCT_NAME          VARCHAR2(60),CATEGORY                    VARCHAR2(60));

構建平臺

insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');??? insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');??? insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');??? insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');??? insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');??? commit;Insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');??? insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS');??? insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS');??? insert into NEWPRODUCTS values (1700, 'WAIT INTERFACE', 'BOOKS');??? commit;

Merge 用法--1

? Merge 根據對 源表 聯接的結果對 目標表 執行修改操作 ( 插入,更新,刪除 )
? 應用場合:對于特定的數據,在 一次批量操作 過程中 ,如果數據已經 存在 ,則對存在的數據按照現有情況進行 更新 ,如果不存在,則需要將數據添加到數據庫的表中。
? 具體操作: - 根據與 源表 聯接的結果,對 目標表 執行插入、更新或刪除操作。

?

Merge 語句:

Merge 插入記錄、更新記錄的語法格式:?MERGE INTO tdest dUSING ?tsrc? sON? (s.srckey = d.destkey)WHEN NOT MATCHED THENINSERT? (destkey, destdata) VALUES? (srckey, srcdata)
???????? WHEN MATCHED THENUPDATE SET?? d.destdata = d.destdata + s.srcdata;
?--? USING 子句用于指定要與目標聯接的數據源。
?--? ON 子句用于指定決定目標與源的匹配位置的聯接條件。
?--? WHEN 子句用于根據ON 子句的結果指定要執行的操作。

注意:當數據不匹配時,執行insert 語句的不同(省略了into 和

目標 表的名稱);

當數據匹配時,執行update 語句的不同(省略了update之后的

目標表名稱)。

使用表時必須使用表的別名。

Merge 用法--2

?考慮有可能的情況是:

1. 原表 xs_s中有該學生,但是目的表xs_d中沒有該學生,則需要將原表中的學生insert 到目的表

2. 原表xs_s有該學生,而且xs_d中也有該學生,則需要根據原表中的學生信息 update 目的表,或者刪除目的表中的部分記錄

檢查表XS_JSJ中的數據是否和表XS的數據相匹配,

如果匹配則使用INSERT子句執行插入數據行。

搭建平臺:create table xs1 as select * from xs;

?

?INSERT INTO XS1(XH,XM,ZYM,XB,CSSJ,ZXF)
? VALUES(007' ,'test', '計算機','男', TO_DATE('19900130','YYYYMMDD'),36);
??? 已知條件: 存在兩個表 xs_s xs_d , 兩個表的結構一致,內容

不統一。目前的想法是,合并兩個表中所有的記錄到xs_d中。

-- 使用MERGE語句XS_JSJ表中新增的數據插入表XS中:MERGE INTO XS aUSING XS1  bON(a.XH=b.XH)WHEN NOT MATCHED THEN             INSERT(a.xh,a.xm,a.zym,a.xb,a.cssj,a.zxf)Values(b.xh,b.xm,b.zym,b.xb,b.cssj,b.zxf);

4418888b9c2243f89e276a8de9c80eb1.png

Merge 用法--3

構建平臺

-- 構建平臺
create table PRODUCTS(PRODUCT_ID             INTEGER,PRODUCT_NAME      VARCHAR2(60),CATEGORY                VARCHAR2(60));create table NEWPRODUCTS(PRODUCT_ID                 INTEGER,PRODUCT_NAME          VARCHAR2(60),CATEGORY                    VARCHAR2(60));

構建平臺

-- 構建平臺insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');??? insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');??? insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');??? insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');??? insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');??? commit;Insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');??? insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS');??? insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS');??? insert into NEWPRODUCTS values (1700, 'WAIT INTERFACE', 'BOOKS');??? commit;

具體實現:

-- 具體實現: 
begininsert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');commit;Insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS');insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS');insert into NEWPRODUCTS values (1700, 'WAIT INTERFACE', 'BOOKS');commit;end;

0dd1b45345824e52b4d8de68f46eb4d9.png

Merge 用法--4

?? 說明:products為目標表,newproducts為源表,則若產品號相匹配,根據源表信息修改目標表的產品名(product_name)和產品類別(category)

merge into products pusing newproducts npon (p.product_id=np.product_id)
when matched thenupdate setp.product_name=np.product_name,p.category=np.category;

346962e3c0b54ab9a346b7946eca4af8.png

?加結果圖和表原始數據圖
?強調目標表

說明:products為目標表,newproducts為源表,則若產品號不匹配,則根據源表將新的紀錄添加到目標表。

Merge into products pusing newproducts npon (p.product_id = np.product_id)when  not matched theninsert values (np.product_id,np.product_name,np.category);

6a3bd5d6517747619ba4974c6b2b316c.png

Merge 用法--5

-- 一個merge例子帶update,delete 和insert 三種操作。
MERGE INTO products pUSING newproducts npON (p.product_id = np.product_id)WHEN MATCHED THENUPDATESET p.product_name = np.product_name,p.category = np.categoryDELETE WHERE (p.category = 'ELECTRNCS')WHEN NOT MATCHED THENINSERTVALUES (np.product_id, np.product_name, np.category)

?

2.實驗--實戰?

首先導入xskc.dmp文件

導入xskc.dmp文件:

輸入命令:

SQL> $imp system/test tables=(xs,kc,xs_kc) file=C:\xskc.dmp

1c60a0c75b604afaa9d89b9efc34f048.png

測試是否成功:

輸入查詢語句:

SQL> select * from xs;

ad6755e68b8045488571b7449f2f768b.png?

?

?

?

?

d294915ed0f54e079c0a6b93dabb4372.png

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167870.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IOS免簽封裝打包蘋果APP的方法

IOS免簽app封裝打包蘋果APP的方法如下: 準備一個未簽名的IPA文件。獲取一個企業證書或個人證書,用于簽名IPA文件。將證書添加到Keychain Access中。安裝iOS App Signer(可以在網上找到相關下載鏈接)。打開iOS App Signer&#xf…

AT360-6T GNSS 單頻高精度授時模塊特性參數

AT360-6T 模塊具有高靈敏度、低功耗、低cost等優勢,可以滿足電力授時,通信授時等領域的應用。AT360-6T特點: 1.支持北斗二代/北斗三代信號 2.高精度授時 3.可靠性授時 實時高精度授時 AT360-6T 系列模塊的授時秒脈沖抖動可以達到 10ns&am…

Vue學習筆記-搭建Vuex

1.概念 在Vue實現集中式狀態(數據)管理的一個插件,對Vue中多個組件的共享狀態進行集中式的管理(讀/寫),也是一種組件間的通信方式,適用于任意組件間的通信 2.使用場景 多個組件需要共享數據時…

Mysql存儲引擎分類

Mysql存儲引擎分類: 在選擇存儲引擎時,應該根據應用系統的特點選擇合適的存儲引擎。對于復雜的應用系統,還可以根據實際情況選擇多種存儲引擎進行組合。 InnoDB: 是Mysql的默認存儲引擎,支持事務、外鍵。如果應用對事務的完整性有…

杰發科技AC7801——ADC軟件觸發的簡單使用

前言 7801資料讀起來不是很好理解,大概率是之前MTK的大佬寫的。在此以簡單的方式進行描述。我們做一個簡單的規則組軟件觸發Demo。因為規則組通道只有一個數據寄存器,因此還需要用上DMA方式搬運數據到內存。 AC7801的ADC簡介 7801的ADC是一種 12 位 逐…

一文學會qml自定義組件

文章目錄 最簡單的自定義控件:自定義按鈕組件添加自定義信號在QML中,自定義組件通常是通過創建一個新的QML文件來實現的,這個文件定義了組件的屬性、信號、槽以及界面。你可以將這個組件看作是一個可重用的模塊,它可以在不同的QML場景中使用,而不需要重復編寫代碼。 以下…

洛谷P1157組合的輸出 遞歸:我他又來辣

沒沒沒沒沒沒沒錯,這是一道簡單的遞歸(其實是深搜加回溯) 我不管,我說是遞歸就是遞歸。 上題干: 題目描述 排列與組合是常用的數學方法,其中組合就是從 n 個元素中抽出 r個元素(不分順序且 r≤n&#x…

查swap內存使用

查詢linux的swap被什么使用了 查詢centos的swap被什么進程使用了 swap內存被什么程序占用,什么程序使用了swap分區,占用swap內存的進程 查系統使用swap內存前10個進程: for i in $( cd /proc;ls |grep "^[0-9]"|awk $0 >10…

大數據技術之數據安全與網絡安全——CMS靶場實訓

大數據技術之數據安全與網絡安全——CMS靶場實訓 在當今數字化時代,大數據技術的迅猛發展帶來了前所未有的數據增長,同時也催生了對數據安全和網絡安全的更為迫切的需求。本篇博客將聚焦于大數據技術背景下的數據安全與網絡安全,并通過CMS&a…

C語言-指針講解(3)

文章目錄 1.字符指針變量1.1 字符指針變量類型是什么1.2字符指針變量的兩種使用方法:1.3字符指針筆試題講解1.3.1 代碼解剖 2.數組指針變量2.1 什么是數組指針2.2 數組指針變量是什么?2.2.3 數組指針變量的舉例 2.3數組指針和指針數組的區別是什么&#…

npm ERR! node-sass@4.13.0 postinstall: `node scripts/build.js`

npm ERR! node-sass4.13.0 postinstall: node scripts/build.js npm config set sass_binary_sitehttps://npm.taobao.org/mirrors/node-sass npm install npm run dev Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有權利。C:\Users\Administr…

4.操作系統常見面試題(2)

3.4 虛擬內存 直接使?物理內存會產??些問題 1. 內存空間利?率的問題:各個進程對內存的使?會導致內存碎?化,當要? malloc 分配?塊很?的內存空間時,可能會出現雖然有?夠多的空閑物理內存,卻沒有?夠?的連續空閑內存這種…

手動實現 git 的 git diff 功能

這是 git diff 后的效果,感覺挺簡單的,不就是 比較新舊版本,新增了就用 "" 顯示新加一行,刪除了就用 "-" 顯示刪除一行,修改了一行就用 "-"、"" 顯示將舊版本中的該行干掉了并…

騰訊云AMD服務器標準型SA5實例AMD EPYC Bergamo處理器

騰訊云服務器標準型SA5實例是最新一代的標準型實例,CPU采用AMD EPYC? Bergamo全新處理器,采用最新DDR5內存,默認網絡優化,最高內網收發能力達4500萬pps。騰訊云百科txybk.com分享騰訊云標準型SA5云服務器CPU、內存、網絡、性能、…

Python 忽略warning警告錯誤 + 跳過報錯繼續執行程序

如何主動產生warning錯誤: import warnings def fxn(): warnings.warn("deprecated", DeprecationWarning) with warnings.catch_warnings(): warnings.simplefilter("ignore") fxn() 那么如何來控制警告錯誤的輸出呢? import warnings warnings.fi…

Modown主題v8.12 安裝教程和主題下載

親測」Modown主題v8.12學習版 上傳好主題選擇該主題就好了設置 設置好的首頁 內容頁: WordPress主題Modown和WordPress插件Erphpdown想必正在使用WordPress程序建站的站長都非常熟悉,因為這兩款應用在WordPress站長圈子里還是比較知名的,所以…

計算機畢業設計 基于SpringBoot的無人智慧超市管理系統的設計與實現 Java實戰項目 附源碼+文檔+視頻講解+答疑

博主介紹:?從事軟件開發10年之余,專注于Java技術領域、Python人工智能及數據挖掘、小程序項目開發和Android項目開發等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優質作者? 🍅文末獲取源碼聯系🍅 👇🏻 精…

GoLang Filepath.Walk遍歷優化

原生標準庫在文件量過大時效率和內存均表現不好 1400萬文件遍歷Filepath.Walk 1400萬文件重寫直接調用windows api并處理細節 結論 1400萬文件遍歷時對比 對比條目filepath.walkwindows api并觸發黑科技運行時間710秒22秒內存占用480M38M 關鍵代碼 //超級快的文件遍歷 fun…

【HuggingFace Transformer庫學習筆記】基礎組件學習:pipeline

一、Transformer基礎知識 pip install transformers datasets evaluate peft accelerate gradio optimum sentencepiece pip install jupyterlab scikit-learn pandas matplotlib tensorboard nltk rouge在host文件里添加途中信息,可以避免運行代碼下載模型時候報錯…

企業計算機服務器中了360勒索病毒怎么辦,360勒索病毒解密文件恢復

計算機技術的不斷發展,為企業的生產運營提供了極大便利,不僅提升了辦公效率,還促進了企業的發展。企業計算機在日常工作中一定加以防護,減少網絡威脅事件的產生,確保企業的生產生產運營。最近,網絡上的360后…