oracle下select語句每個結果集中都有乙個偽欄位(偽列)rownum存在。
rownum用來標識每條記錄的行號,行號從1開始,每次遞增1。
rownum是虛擬的順序值,前提是先排序
使用rownum需注意:
1.rownum的是在取資料的時候產生的序號 。當rownum和order by一起使用時,會首先選出符合rownum條件的記錄,然後再進行排序。
2.rownum在過濾時只能使用:n的話,過濾掉不滿足條件的,重新排又從1開始還是不滿足條件,再過濾最終會把所有資料都過濾掉
----思路:先按工資進行排序,再根據行號過濾留下前5條記錄top n
--查詢工資排名前五的員工資訊
--因為sql語句的執行順序是先執行select返回查詢結果(行號在此時排好)再進行排序
--所以先需要用子查詢,返回排好序的查詢結果
select t.* ,rownum from--思路:因為過濾完rownum欄位也會隨之變化,所以rownum不能使用大於號判斷(select
*from emp order
by sal desc
)t where rownum<=5;
--分頁查詢
--查詢工資排名6~10的員工資訊
--所以還是要用子查詢先把行號排好定下來(需要用別名與外層查詢的rownum區分開來)
selectrowid 是oracle中每個表都有的乙個實際存在的乙個值,rowid的值是唯一的*from
(select t.*
, rownum rown
from
(select
*from emp order
by sal desc) t) where rown>
5and rown<=
10;
--先建立一張表往裡面插入幾條相同的資料
create
table test01(id number(3),name varchar2(10
))insert
into test01 values(123,'張三'
);insert
into test01 values(124,'李四'
);insert
into test01 values(125,'王五'
);insert
into test01 values(126,'張三'
);insert
into test01 values(127,'張三'
);insert
into test01 values(128,'李四'
);insert
into test01 values(129,'張三'
);--
資料去重
--思路:重複項進行分組,獲取每一組最小(或最大)的rowid,刪除不在此列的資料
oracle分頁與去重
查詢emp表中的記錄 分頁,每一頁顯示5條記錄 查詢第二頁的資料 select from select ename,sal,deptno,rownum rw from emp where rw 5 and rw 10 查詢第二頁的資料,並排序 將重覆記錄保留一條 如上,test2表中有4條重複資料,...
oracle 資料庫 去重查詢
oracle 資料庫多字段去重 方法介紹 distinct 關鍵字 group by row number over partition by 列 order by 列 desc 我的需求是 根據某幾列去重 查詢出去重後的全部資訊。最後我選擇的是第三種方法。我的想法 我想找出一種更簡單的方法去 實現...
Oracle 資料去重
假設資料表a,3個字段 mid 表id bjsj 報警時間 val 資料值 篩選出2019 09 20 2019 09 25時間段內記錄,每塊表的最後一條報警記錄。做法 按條件查詢出符合條件記錄,然後取每塊表的報警時間為最大的一條記錄。oracle資料庫提供了乙個函式 row number 用於給資...