Oracle分页查询的SQL模板
select * from 【Table:表名】 order by 【筛选条件】
limit 【查询起点】,【需要的行数】;
与MySQL的分页查询("limit")不同,oracle的分页查询是用到了"rownum"。
rownum是一种伪列,它会根据返回记录生成一个序列化的数字。利用rownum,我们可以生产一些原先难以实现的结果输出。
在oracle中,早已有实现分页查询的模板,只要把相关的参数替换即可。
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (【替换内容:SQL语句】) A
WHERE ROWNUM <= 【替换内容:起始索引 + 每页显示的数量】
)
WHERE RN >= 【替换内容:起始索引】
替换内容中的“SQL语句”直接写入正常的select语句即可。
假设现有一张客户表CUSTOMER
例如我想要在分页查询(每页显示10行客户信息)查询第4页的客户情况,以下内容应替换为:
【替换内容:SQL语句】: SELECT * FROM CUSTOMER
【替换内容:起始索引】: 30
【替换内容:起始索引 + 每页显示的数量】: 40
SQL语句如下:
<pre name="code" class="sql">SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM CUSTOMER) A
WHERE ROWNUM <= 40
)
WHERE RN >= 30
当然,这只是一个简单的模板。如果遇到了更加复杂的情况,或者追求更好的效率,还是要多多学习好SQL语句的。才能写出更好的SQL。