一: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;