标签:
*3.分页查询
不同数据库分页查询方法不同,Oracle采用rownum列实现
分页查询;而MySQL采用的是limit实现。
1)rownum列
rownum列是Oracle自动添加的。默认是隐藏的,
一般被称为伪列。该列值记录的是记录的行编号。
在建表或执行一个select查询后,Oracle都会自动追加
rownum列,在载入数据时形成一列顺序的记录行编号。
//取出EMP的前5条记录
select empno,ename,sal,rownum
from emp
where rownum<=5;
//取出EMP中工资最高的前5条记录.
select empno,ename,sal,rownum
from(
select empno,ename,sal
from emp
order by sal desc
)
where rownum<=5;
//查询工资最低的前5个员工
select empno,ename,sal
from(
select empno,ename,sal
from emp
order by sal
)
where rownum <=5;
//查询最早入职的前5个员工
select empno,ename,hiredate
from(
select empno,ename,hiredate
from emp
order by hiredate
)
where rownum<=5;
======如何获取前n条记录=========
1)先按照排序字段进行记录的排序(构建临时的数据源)
将要抓取的记录排在前面。
2)将上面查询结果当做数据源进行查询,where条件部分
使用rownum<?或rownum<=?条件
注意:rownum字段当条件时不允许使用>,>=条件。
=条件只可以使用=1.
=========================
//取工资最高的排在第5(不包含)-10位的员工
select empno,ename,sal
from(
select empno,ename,sal,rownum rn
from(
select empno,ename,sal
from emp
order by sal desc
)
)
where rn>5 and rn<=10;
//查询入职最早的排在第3(不包含)-6位的员工
select empno,ename,hiredate
from(
select empno,ename,hiredate,rownum rn
from(
select empno,ename,hiredate
from emp
order by hiredate
)
)
where rn>3 and rn<=6;
=======按某字段排序取前n到m之间的记录=========
1)先写最内部的select,将需要分页显示
所有记录查询出来,按字段排序。
(将需要抓取的记录排在前面)
2)再写中间的select,将rownum列提取出来,
在提取时给rownum列指定别名
3)最后写最外层的select,利用rownum别名
充当where过滤条件.
例如:rownum别名>n and rownum别名<m
==============================
//查询2080到2083年期间入职的员工信息,
//显示最近入职的排在3(不包含)-6位的员工信息
select empno,ename,hiredate
from(
select empno,ename,hiredate,rownum rn
from(
select empno,ename,hiredate
from emp
where to_char(hiredate,‘yyyy‘) >=‘2080‘
and to_char(hiredate,‘yyyy‘) <=‘2083‘
order by hiredate desc
)
)
where rn>3 and rn<=6;
分页查询
标签:
原文地址:http://www.cnblogs.com/yunman/p/5497563.html