数据库表
student表
mysql分页
分页语句1: limit n 不能设置偏移量——每次扫描n条数据,效率高
查询第一页:SELECT * FROM student [WHERE id > 5*0] LIMIT 5;
查询结果
若想查看第二页怎么办呢?
可以将 where 条件中 id 的值设为变量,作为偏移量
SELECT * FROM student WHERE id > 5*1 LIMIT 5;
查询结果
分页语句2: limit m,n——每次扫描 m+n 条数据,效率低
查询第一页:SELECT * FROM student LIMIT 0,5;
查询结果
查询第二页:SELECT * FROM student LIMIT 5,5;
查询结果
分页语句3:limit n offset m 等同于 limit m,n——每次扫描m+n条数据,效率低
查询第一页:SELECT * FROM student LIMIT 5 OFFSET 0;
查询第二页:SELECT * FROM student LIMIT 5 OFFSET 5;
查询结果与 limit m,n 查询结果一致
postgre分页
分页语句1:limit n
查询第一页:SELECT * FROM student [WHERE id > 5*0] LIMIT 5;
查询第二页:SELECT * FROM student WHERE id > 5*1 LIMIT 5;
分页语句2:limit n offset m
查询第一页:SELECT * FROM student LIMIT 5 OFFSET 0;
查询第二页:SELECT * FROM student LIMIT 5 OFFSET 5;
注意:postgre不支持limit m,n
oracle分页
oracle中没有 limit 关键字,只能通过 rownum 与子查询联合使用控制分页
第一种分页方式:minus 和 rownum 连用
查询第一页:
SELECT * FROM STUDENT WHERE ROWNUM <= 5*1 MINUS
SELECT * FROM STUDENT WHERE ROWNUM <= 5*0;
查询第二页:
SELECT * FROM STUDENT WHERE ROWNUM<=5*2 MINUS
SELECT * FROM STUDENT WHERE ROWNUM<=5*1;
思路:先查询出需要的所有数据行数,在查询需要显示的行数
查询第一页:
SELECT * FROM (SELECT s.*, ROWNUM rn FROM STUDENT s WHERE ROWNUM <= 5*1) WHERE rn > 5*0;
查询第二页:
SELECT * FROM (SELECT s.*, ROWNUM rn FROM STUDENT s WHERE ROWNUM <= 5*2) WHERE rn > 5*1;