sqlite、mysql、sqlserver、postgresql、oracle分页sql汇总
数据库的种类很多,对于关系型数据库,有sqlite、mysql、oracle、postgresql、sqlserver等,那么他们在进行分页的时候的sql写法是否一致呢,今天我们来为大家整理一下。
一、sqlite分页sql
select * from users order by id limit 10 offset 0; //offset代表从第几条记录“之后“开始查询,limit表明查询多少条结果
二、mysql分页sql
select * from users order by id limit 0,10; //limit第一个参数表示从多少行开始,第二产参数表示取多少行
三、sqlserver分页sql
第一种采用offset fetch next方式,2012版本之上支持
select * from users order by id offset 0 rows fetch next 10 rows only ;; //offset A rows ,将前A条记录舍去,fetch next B rows only ,向后在读取B条数据
第二种,利用row_number() over(order by id)函数计算出行数,选定相应行数返回,SQL server 2005版本以上才支持
-- 分页查询第2页,每页有10条记录 select top 10 * from (select row_number() over(order by sno asc) as rownumber,* from user) temp_row where rownumber>10;第三种,max主键,先top前11条行记录,然后利用max(id)得到最大的id,之后再重新再这个表查询前10条,不过要加上条件,where id>max(id)
-- 分页查询第2页,每页有10条记录 select top 10 * from user where sNo>= (select max(sNo) from (select top 11 sNo from user order by sNo asc) temp_max_ids) order by sNo;
第二种与第三种写法有些嵌套,还是喜欢第一种写法,与其他数据库有点相似,简洁好用
四、postgresql分页sql
他跟sqlite一样select * from users order by id limit 10 offset 0; //offset代表从第几条记录“之后“开始查询,limit表明查询多少条结果
五、oracle
在Oracle中实现分页的方法大致分为两种,用ROWNUM关键字和用ROWID关键字
第一种。用ROWNUM关键字
--ROWNUM select * from ( select rownum as row_no, t.* from user t where rownum <= pageSize*currentPageNo ) b where b.row_no > pageSize*(currentPageNo -1);第二种,用ROWID关键字
--ROWID SELECT * FROM (SELECT RID FROM (SELECT R.RID, ROWNUM LINENUM FROM (SELECT ROWID RID FROM TABLE1 WHERE TABLE1_ID = XX ORDER BY order_date DESC) R WHERE ROWNUM <= 20) WHERE LINENUM >= 10) T1, TABLE1 T2 WHERE T1.RID = T2.ROWID;
网友评论0