程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> oracle中rownum詳細解析

oracle中rownum詳細解析

編輯:Oracle數據庫基礎
本人最近在使用Oracle的rownum實現分頁顯示的時候,對rownum做了進一步的分析和研究。現歸納如下,希望能給大家帶來收獲。
       對於rownum來說它是Oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽字段可以用於限制查詢返回的總行數,而且rownum不能以任何表的名稱作為前綴。
舉例說明:
例如表:student(學生)表,表結構為:
ID        char(6)            --學號
name   VARCHAR2(10)   --姓名
create table student (ID char(6), name VARCHAR2(100));
insert into sale values(''200001'',‘張一’);
insert into sale values(''200002'',‘王二’);
insert into sale values(''200003'',‘李三’);
insert into sale values(''200004'',‘趙四’);
commit;
(1) rownum 對於等於某值的查詢條件
如果希望找到學生表中第一條學生的信息,可以使用rownum=1作為條件。但是想找到學生表中第二條學生的信息,使用rownum=2結果查不到數據。 因為rownum都是從1開始,但是1以上的自然數在rownum做等於判斷是時認為都是false條件,所以無法查到rownum = n(n>1的自然數)。
SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回記錄條數的地方,保證不出錯,如:隱式游標)
SQL> select rownum,id,name from student where rownum=1;
     ROWNUM ID      NAME
---------- ------ ---------------------------------------------------
          1 200001 張一
SQL> select rownum,id,name from student where rownum =2;
     ROWNUM ID      NAME
---------- ------ ---------------------------------------------------
(2)rownum對於大於某值的查詢條件
    如果想找到從第二行記錄以後的記錄,當使用rownum>2是查不出記錄的,原因是由於rownum是一個總是從1開始的偽列,Oracle 認為rownum> n(n>1的自然數)這種條件依舊不成立,所以查不到記錄
SQL> select rownum,id,name from student where rownum >2;
ROWNUM ID      NAME
---------- ------ ---------------------------------------------------
那如何才能找到第二行以後的記錄呀。可以使用以下的子查詢方法來解決。注意子查詢中的rownum必須要有別名,否則還是不會查出記錄來,這是因為rownum不是某個表的列,如果不起別名的話,無法知道rownum是子查詢的列還是主查詢的列。
SQL>select * from(select rownum no ,id,name from student) where no>2;
         NO ID      NAME
---------- ------ ---------------------------------------------------
          3 200003
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved