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

一:oracle實現去重:mysql

user數據表:sql

分兩步:1.查詢重複數據  2.刪除重複數據數據庫

1.查詢重複數據:
在oracle中實現查詢重複數據,能夠藉助於rowid這個僞列。oracle中每一個表物理上都存在一個rowid的列,這個列
是每行數據在oracle中惟一標識,每一個表的主鍵能夠保證數據在本表中不重複,rowid能夠保證該條數據在數據庫
中的全部表中都不重複。oracle

--查詢重複數據 用戶名和密碼都相同的數據叫重複數據 
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加上,去重重複數據,只要用戶名相同,就認爲這條數據重複了。code

delete from users u1 where exists ( select 1 from users u2 where u1.username=u2.username and
u1.id>u2.id);

二:oracle實現分頁blog

mysql中怎麼實現分頁,使用limit m,n m從第幾條數據開始取,下標從0開始。n表明最多取多少條數據。
在oracle中不能再使用limit進行分頁。能夠使用rownum來進行分頁。和rowid差很少,rownum也是一個僞列,
rowid是物理上存在的一個僞列,rownum是物理上不存在的。只在查詢的時候賦值。用的時候和rowid差很少。it

舉例:
查詢前5條數據:
select * from emp where rownum <6;
查詢第6到第10條數據:(錯誤的)
select * from emp where rownum>5 and rownum<11;
執行直接sql語句,查詢不出結果,是由於rownum若是使用大於號查詢不到數據:class

 

rownum是先查詢再賦值。若是查詢返回的數據知足條件就獲取一個rownum賦值,rownum從1開始賦值,接着 2 3 4 5 6select

解決方法:sql語句

經過子查詢把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;
相關文章
相關標籤/搜索