oracle分页查询sql关键字(Oracle分页查询语句面试不再怕)(1)

实际开发过程中难免接触到Oracle数据库。而数据库的分页又是我们最常用的语句之一,而且面试问的频率也很高。Oracle数据库的分页不像Mysql数据库用一个limit就搞定那么简单。该篇文章为大家介绍Oracle数据库的通用写法,以便大家熟悉Oracle数据库的分页写法。

分页查询格式:

oracle分页查询sql关键字(Oracle分页查询语句面试不再怕)(2)

对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。

这是因为在CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 20就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。

而第二个查询语句,由于查询条件BETWEEN 11 AND 20是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

对于第一种理解的话还是从里面向外面更好一些,先是从一个表中获得数据select * from 表名,再给这个表赋上RN的值并且将索取的行数确定为20行select a.*,rownum rn from (select * from 表名) a where rownum<=20,之后再确定从哪一行开始select * from (select a.*,rownum rn from (selecct * from table_name) a where rownum<=20) where rn>=11

上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。

最后祝大家工作顺利,天天开心!!!

,