日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle数据库两表数据比较

發布時間:2023/12/18 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle数据库两表数据比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉自http://blog.sina.com.cn/s/blog_3ff4e1ad0100tdl2.html

1 引言

在程序設計的過程中,往往會遇到兩個記錄集的比較。如華東電網PMS接口中實現傳遞一天中變更(新增、修改、刪除)的數據。實現的方式有多種,如編程存儲過程返回游標,在存儲過程中對兩批數據進行比較等等。

本文主要討論利用ORACLE的MINUS函數,直接實現兩個記錄集的比較。

2 實現步驟

假設兩個記錄集分別以表的方式存在,原始表為A,產生的比較表為B。

2.1 判斷原始表和比較表的增量差異

利用MINUS函數,判斷原始表與比較表的增量差異。

此增量數據包含兩部分:

1)原始表A有、比較表B沒有;

2)原始表A和比較表B都有,但是某些字段發生了改變。

2.2 判斷比較表與原始表的增量差異

利用MINUS函數,判斷比較表與原始表的增量差異。

此增量數據包含兩部分:

1)比較表B有、原始表A沒有;

2)比較表B和原始表A都有,但是某些字段發生了改變。

2.3 得出結果集

利用SQL語句中的對兩種增量差異的處理,實現判別出比較表相對于原始表是進行了“插入”、“修改”、“刪除”的情況。

3 實例演練

3.1創建表并插入數據

Create table A(A1 number(12),A2 varchar2(50));
Create table B(B1 number(12),B2 varchar2(50));
Insert Into A Values (1,'a');
Insert Into A Values (2,'ba');
Insert Into A Values (3,'ca');
Insert Into A Values (4,'da');
Insert Into B Values (1,'a');
Insert Into B Values (2,'bba');
Insert Into B Values (3,'ca');
Insert Into B Values (5,'dda');
Insert Into B Values (6,'Eda');
COMMIT;

3.2進行增量差異數據比較

3.2.1原始表A與比較表B的增量差異

Select * from A minus select * from B;

結果如下:

?????????? A1?????????? A2
---------------------------------------------------------------
??????????? 2????????? ba
??????????? 4????????? da

3.2.2比較表B與原始表A的增量差異

Select * from B minus select * from A;

結果如下:

?????????? B1??????????? B2
---------------------------------------------------------------
??????????? 2??????????? bba
??????????? 5??????????? dda
??????????? 6??????????? Eda

3.2.3兩種增量差異的合集

此合集包含3類數據:

--1、原始表A存在、比較表B不存在,屬于刪除類數據,出現次數1

--2、原始表A不存在、比較表B存在,屬于新增類數據,出現次數1

--3、原始表A和比較表B都存在,屬于修改類數據,出現次數2

Select A1,A2,1 t from (Select * from A minus select * from B) union
Select B1,B2,2 t from (Select * from B minus select * from A);

結果如下:

?????????? A1?????????????????? A2?????????????? T
------------- -------------------------------------------------- ----------
??????????? 2?????????????????? ba??????????????? 1
??????????? 2?????????????????? bba?????????????? 2
??????????? 4?????????????????? da??????????????? 1
??????????? 5?????????????????? dda?????????????? 2
??????????? 6?????????????????? Eda?????????????? 2

3.3得到結果

Select A1,sum(t) from
(Select A1,A2,1 t from (Select * from A minus select * from B) union
Select B1,B2,2 t from (Select * from B minus select * from A))
Group by A1;

結果如下:

?????????? A1???? SUM(T)
-----------------------
??????????? 6????????? 2
??????????? 2????????? 3
??????????? 4????????? 1
??????????? 5????????? 2

結果中SUM(T)為1的為“刪除”的數據,SUM(T)為2的為“新增”的數據,SUM(T)為3的為“修改”的數據。

4 分析

4.1實現分析

在兩個結果集比較的過程中,減少原始表和比較表比較的字段數目以及原始表和比較表的數據量都可以提高效率。

5 總結

此比較方法在執行效率上,可能不是非常好,但是能解決效率要求并不太高的問題。在實現上利用了Oracle的minus函數,此文在于引起大家對于Oracle函數的認識。

轉載于:https://www.cnblogs.com/abc8023/p/4917583.html

總結

以上是生活随笔為你收集整理的oracle数据库两表数据比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。