Oracle、MYSQL、SQLServer分页

oracle分页SQL;
oracle没有提供分页的相关命令,但可以利用rownum进行分页。
首先必须明确:
rownum分配,先有结果集后分配rownum
rownum 永远从1开始分配,
rownum在小于等于的情况下可以得到结果集
rownum在使用>n(从1开始的任何数)得不到结果集
rownum在使用>=1可以得到所有的结果集
rownum是oracle 动态分配的,要分页必须固定rownum的值,方法:子查询

无ORDER BY排序的写法
SELECT *
  FROM (Select ROWNUM AS ROWNO, T.*
     from Table T where ROWNUM <= 20) TABLE_ALIAS
         WHERE TABLE_ALIAS.ROWNO >= 11;

有ORDER BY排序的写法
SELECT * FROM (  
   SELECT T.*, ROWNUM RN   
      FROM (SELECT * FROM TABLE ORDER BY ?) T   
      WHERE ROWNUM <= 20 
   )WHERE RN >= 11 



SELECT * FROM(  
   SELECT T.*, ROWNUM RN   
      FROM (SELECT * FROM TABLE ORDER BY ?) T   
   )WHERE RN BETWEEN 11 AND 20

排序的两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多,
最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也
是所有数据,数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

sqlserver 2005分页SQL:
SELECT * FROM (
   SELECT TOP 页面容量 * FROM (
      SELECT TOP 页面容量*当前页码 * FROM 表 WHERE 条件
       ORDER BY 字段A ASC ) AS TEMPTABLE1
      ORDER BY 字段A DESC ) AS TEMPTABLE2
      ORDER BY 字段A ASC

MYSQL分页SQL:
select * from table limit 10,20

你可能感兴趣的:(oracle,sql,mysql)