第一种:ROWID
ROWID 是一个类似于rownum的伪列,用于定位数据库中一条记录的一个相对唯一地址值
ROWID格式:
select Rowid from emp where comm=0
AAAR3s AAE AAAACX AAJ
--对象号(6个字符) --文件号(3个字符) --块号(6个字符) -- 行号(3个字符)
ROWID进行分页
SELECT *
FROM EMP
WHERE ROWID IN
(SELECT RID
FROM (SELECT ROWNUM RN, RID
FROM (SELECT ROWID RID, EMPNO FROM EMP ORDER BY EMPNO DESC)
WHERE ROWNUM <= ( (1-1) * 5 + 5 )) --每页显示几条
WHERE RN > ((1-1) * 5) ) --当前页数
ORDER BY EMPNO DESC;
第二种分析函数
SQL Server,oracle都支持这个函数
第一种写法:
SELECT *
FROM (SELECT T.*, ROW_NUMBER() OVER(ORDER BY empno DESC) RK FROM emp T)
WHERE RK <= 6---显示的条数
AND RK > 0;---从第几条开始
第二种写法: between and 函数
SELECT *
FROM (SELECT T.*, ROW_NUMBER() OVER(ORDER BY empno DESC) RK FROM emp T)
where RK between 0 and 6
------0代表开始条数 6显示的条数
第三种:rownum
rownum是oracle系统顺序分配为从查询返回的行的编号
第一种写法:
select *
from(
select rownum rn,sal
from(
select sal
from emp
order by sal desc
)
)where rn <=5 and rn >=0
------------rn<=显示条数 and rn >=第几条开始
第二种写法:
这种写法执行的效率高
SELECT *
FROM (SELECT T.*, ROWNUM RN
FROM (SELECT * FROM EMP ORDER BY EMPNO DESC) T
WHERE ROWNUM <= 5)
WHERE RN > 0;
----然后查出0-5条记录
注意 的rownum用法:
正确的:
SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM<=10;
错误的:
SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE rn<=10;
如果想使用外面在嵌套查询如:
select * from (
SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e
)WHERE rn<=10