Oracle/MySql/SQL Sqlserver分页查询

简述

    简单归纳一下Oracle,MySql,SQL Sqlserver这三个数据库的分页查询语句。数据库


 

Oracle分页查询

    例:每页显示两条数据,如今要查询第二页,也就是第3-4条数据。session

    查询语句:spa

1 select * from (
2        select dept.*,rownum num from dept where rownum <= 4
3 ) d where d.num >= 3

 

    解释:使用rownum列进行分页,子查询中设置查询结束行,父查询中设置查询起始行。hibernate

    注意:子查询中的rownum列要起一个别名。code

MySQL分页查询

    例:每页显示10条数据,如今要查询第三页,也就是第21-30条数据。server

    查询语句:对象

1 SELECT * FROM `tab_sys_menu` LIMIT 20, 10

    解释:使用limit进行分页查询,limit以后的第一个参数是设置查询起始行,第二个参数是设置查询行数(也就是每页显示数量)。blog

    注意:起始行从0开始。get

SQL Server分页查询

    例:每页显示10条数据,如今要查询第三页,也就是第21-30条数据。it

    查询语句:

1 select top 10 * from Room where RoomId not in (
2     select top 20 RoomId from Room
3 )

    解释:使用子查询进行分页,子查询里面的top值设置为要排除的行,好比要从第21条数据开始查询,那么前20条数据确定是不要的,再好比要从第41条数据开始查询,那么前40条数据确定是不要的。

          父查询的top值设置为查询行数(也就是每页显示数量)


 

扩展

    其实分页查询语句也不必定非得本身写,若是项目dao层用hibernate实现的话,有两种方式能够很是方便的实现分页查询。

    它们分别是Criteria查询和HQL查询。

    Criteria查询:建立Criteria对象以后,有两个方法,分别是:setMaxResults(设置每页显示记录数)和setFirstResult(设置从第几行开始查询)。

    HQL查询:其实和上面的同样,根据Session建立Query以后,query对象也有setMaxResults(设置每页显示记录数)和setFirstResult(设置从第几行开始查询)方法。

    例:session.createQuery(hql).setFirstResult((result.getPageNo()-1)*result.getPageSize()).setMaxResults(size).list();

相关文章
相关标签/搜索