1. 程式人生 > >分頁查詢sql

分頁查詢sql

一,ORACLE

關鍵字 rownum

規則:  

 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=startrow

或 SELECT *

  FROM (SELECT A.*, ROWNUM RN

          FROM (SELECT * FROM TABLE_NAME) A

         WHERE ROWNUM <= 40)

 WHERE RN > 20

 

其中的SELECT * FROM TABLE_NAME 表示沒有進行分頁時的sql查詢語句,而ROWNUM 和RN 限定了查詢資料的範圍。

例項:

   select * from ( select OL.*, rownum  rc from OffsiteOutreachTeam_List OL where rownum <= 48 ) OL where OL.rc >= 9      

   SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM OffsiteOutreachTeam_List) A WHERE ROWNUM <= 40) WHERE RN > 20      

  select * from ( select OL.*, rownum rc from OffsiteOutreachTeam_List OL) where rc >= 9 and rc <= 20

  select * from ( select OL.*, rownum rc from OffsiteOutreachTeam_List OL) where rc between 10 and 20

  注意:可以通過排序,避免不同頁出現重複的資料。

  1.   SELECT * FROM  
  2.   2  (  
  3.   3  SELECT A.*, ROWNUM RN  
  4.   4  FROM (SELECT ID, OWNER, OBJECT_NAME FROM TEST WHERE OWNER IS NOT NULL ORDER BY OWNER, ID) A  
  5.   5  WHERE ROWNUM <= 20  
  6.   6  )  
  7.   7  WHERE RN >= 11;

二,MySQL

關鍵字:limit

MySQL資料庫分頁     Select * from 表名 limit startrow,pagesize     (Pagesize為每頁顯示的記錄條數)    

三,SQL Servel

關鍵字:top

   3.SQL Server 2000資料庫分頁     Select top pagesize * from 表名 where 列名 not in(select top pagesize*page 列名 from 表名 order by列名) order by列名

   4.SQL Server 2005資料庫分頁     Select * from (select 列名,row_number() over(order by 列名1) as 別名from 表名) as t where t.列名1>=startrow and t.列名1<=endrow    

 

補加:

1.oracle資料庫分頁
    select * from
    (select a.*,rownum rc from 表名 where rownum<=endrow) a
    where a.rc>=startrow;

2.DB2資料庫分頁
    Select * from
    (select rownumber() over() as rc,a.* from
    (select * from 表名 order by 列名) as a)
    where rc between startrow and endrow;

3.SQL Server 2000資料庫分頁
    Select top pagesize * from 表名
    where 列名 not in
    (select top pagesize*page 列名 from 表名 order by 列名)
    order by 列名;

4.SQL Server 2005資料庫分頁
    Select * from
    (select 列名,row_搜尋number() over(order by 列名1) as 別名from 表名) as t
    where t.列名1>=startrow and t.列名1<=endrow;

5.MySQL資料庫分頁
    Select * from 表名 limit startrow,pagesize;
    (Pagesize為每頁顯示的記錄條數)

6.通用模式
    select * from
    (select * from student where sid not in
    (select sid from student where rownum<=(currentPage-1)*pageSize)
    ) where rownum <=pageSize;