- MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置,记录个数;
- ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用 ROWNUM<100, 不能用ROWNUM>80
- 先好好理解rownum的意义,因为ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列(强调:先要有结果集)。简单的说rownum是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。
1、Oracle的分页查询
此分页语句,以Oracle中EMP表为例,查询第6条到第10条的数据
select * from --第三层限制最小值
( select A.*,ROWNUM rn from --第二层通过ROWNUM限制最大值
(select * from emp) A --第一层查询要分页的所有数据
where ROWNUM<=10 )
where rn>5;
通用格式:
select * from --第三层限制最小值
( select A.,ROWNUM rn from --第二层通过ROWNUM限制最大值
(select * from emp) A --第一层查询要分页的所有数据
where ROWNUM<=currentPagesize )
where rn>(currentPage-1)*size;
说明:>= y,<= x表示从第y行(起始行)~x行(结束行)
注意:
- currentPage表示当前页
- size表示每页要显示的记录数
2、MySQL的分页查询
假装mysql中有emp表
select * from emp limit 5,10 从第六的开始查十个;因为起始是0;
通用格式:
select * from stu limit m, n;
select * from emp limit (startPage-1)*size, size
1)第一个参数值m表示起始行,第二个参数表示取多少行(页面大小)
2)m= (2-1)*10+1,n=10 ,表示 limit 11,10从11行开始,取10行,即第2页数据。
3)n参数值不能在语句当中写计算表达式,写到语句之前必须计算好值。
3、两个数据库的区别
1)用户体验上:
- mysql是开源的, oracle不是开源的。
- MySQL是轻量型数据库,并且免费,没有服务恢复数据。Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务。
2)数据安全上:
- Mysql:默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。
- Oracle保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。
3)语法上:
- MySQL默认是自动提交, Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮
- MySQL是直接在SQL语句中写"select… from …where…limit x,y",有limit就可以实现分页; Oracle则是需要用到伪列