複習鞏固 oracle如何實現去重和分頁

2022-02-03 17:17:32 字數 1969 閱讀 9456

一:oracle實現去重:

user資料表:

分兩步:1.查詢重複資料  2.刪除重複資料

1.查詢重複資料:

在oracle中實現查詢重複資料,可以借助於rowid這個偽列。oracle中每個表物理上都存在乙個rowid的列,這個列

是每行資料在oracle中唯一標識,每個表的主鍵可以保證資料在本表中不重複,rowid可以保證該條資料在資料庫

中的所有表中都不重複。

--查詢重複資料 使用者名稱和密碼都相同的資料叫重複資料 

select u1.*,rowid from users u1 where exists ( select 1

from users u2 where u1.username=u2.username and u1.password=u2.password and u1.rowid>u2.rowid );

--刪除重複資料

delete from users u1 where exists ( select 1 from users u2 where u1.username=u2.username and

u1.password=u2.password and u1.rowid>u2.rowid );

例:把使用者表的主鍵id加上,去重重複資料,只要使用者名稱相同,就認為這條資料重複了。

delete from users u1 where exists ( select 1 from users u2 where u1.username=u2.username and

u1.id>u2.id);

二:oracle實現分頁mysql中怎麼實現分頁,使用limit m,n m從第幾條資料開始取,下標從0開始。n代表最多取多少條資料。

在oracle中不能再使用limit進行分頁。可以使用rownum來進行分頁。和rowid差不多,rownum也是乙個偽列,

rowid是物理上存在的乙個偽列,rownum是物理上不存在的。只在查詢的時候賦值。用的時候和rowid差不多。

舉例:查詢前5條資料:

select * from emp where rownum <6;

查詢第6到第10條資料:(錯誤的)

select * from emp where rownum>5 and rownum<11;

執行直接sql語句,查詢不出結果,是因為rownum如果使用大於號查詢不到資料:

rownum是先查詢再賦值。如果查詢返回的資料滿足條件就獲取乙個rownum賦值,rownum從1開始賦值,接著2 3 4 5 6

解決方法:

通過子查詢把rownum從偽列變成實際的列。

select * from (select e.*,rownum r from emp e where rownum<11) where r>5
對emp表按empno倒序排列,獲取從第6到第10條資料。

select * from ( select e.*,rownum r from ( select * from emp order by empno desc)e where rownum<11 )

where r>5;

Oracle如何實現多個欄位去重

我們通常使用distinct關鍵字來去除重覆記錄,還有沒有其他辦法呢?通過查詢資料,確認group by也可以,利用rowid也可以實現功能。其中,group by是用來分組統計的,能用distinct的地方就不要用group by。下面我們看一下幾種方法具體如何實現,至於選用哪一種,主要還是看需求...

oracle如何實現lastindexof的功能

第一種實現方法 reverse substr reverse str 1,instr reverse str 1 利用reverse函式,該函式的功能是反轉倒置。但是據測試在儲存過程中不能使用。於是到網上找了另外一種實現方法。第二種 substr str,instr str,1,1 1,length...

如何去實現hive離線分析指令碼

總共分為3步 1.編寫hql指令碼 簡單案例 編寫hql指令碼 vim tongji1.hql 內容如下 select from fluxdb.tongji1 where reporttime 很簡單就是乙個表查詢,沒啥邏輯 儲存退出後,記得 賦予執行許可權 chmod x tongji1.hql ...