oracle 查詢分頁 oracle分頁查詢sql語句怎么寫



文章插圖
oracle 查詢分頁 oracle分頁查詢sql語句怎么寫

文章插圖
對于rownum來說它是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽字段可以用于限制查詢返回的總行數,且rownum不能以任何表的名稱作為前綴 。
(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 =2;
ROWNUM ID NAME
———- —— —————————————————
(2)rownum對于大于某值的查詢條件
如果想找到從第二行記錄以后的記錄,當使用rownum>2是查不出記錄的,原因是由于rownum是一個總是從1開始的偽列,Oracle 認為rownum> n(n>1的自然數)這種條件依舊不成立,所以查不到記錄 。
查找到第二行以后的記錄可使用以下的子查詢方法來解決 。注意子查詢中的rownum必須要有別名,否則還是不會查出記錄來,這是因為rownum不是某個表的列,如果不起別名的話,無法知道rownum是子查詢的列還是主查詢的列 。
SQL>select * from(select rownum no ,id,name from student) where no>2;
NO ID NAME
———- —— —————————————————
3 200003 李三
4 200004 趙四
(3)rownum對于小于某值的查詢條件
rownum對于rownum<n((n>1的自然數)的條件認為是成立的,所以可以找到記錄 。
SQL> select rownum,id,name from student where rownum <3;
ROWNUM ID NAME
———- —— —————————————————
1 200001 張一
2 200002 王二
查詢rownum在某區間的數據,必須使用子查詢 。例如要查詢rownum在第二行到第三行之間的數據,包括第二行和第三行數據,那么我們只能寫以下語句,先讓它返回小于等于三的記錄行,然后在主查詢中判斷新的rownum的別名列大于等于二的記錄行 。但是這樣的操作會在大數據集中影響速度 。
SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
NO ID NAME
———- —— —————————————————
2 200002 王二
3 200003 李三
(4)rownum和排序
Oracle中的rownum的是在取數據的時候產生的序號,所以想對指定排序的數據去指定的rowmun行數據就必須注意了 。
SQL> select rownum ,id,name from student order by name;
ROWNUM ID NAME
———- —— —————————————————
3 200003 李三
2 200002 王二
1 200001 張一
4 200004 趙四
可以看出,rownum并不是按照name列來生成的序號 。系統是按照記錄插入時的順序給記錄排的號,rowid也是順序分配的 。為了解決這個問題,必須使用子查詢;
SQL> select rownum ,id,name from (select * from student order by name);
ROWNUM ID NAME
———- —— —————————————————
1 200003 李三
2 200002 王二
3 200001 張一
4 200004 趙四
【oracle 查詢分頁 oracle分頁查詢sql語句怎么寫】這樣就成了按name排序,并且用rownum標出正確序號(有小到大)