ORACLE之实用SQL(第二篇)
对某张表数据进行分组
(一)、根据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 <= ( (currentPage-1) * pageSize + pageSize )) --每页显示几条
WHERE RN > ((currentPage-1) * pageSize) ) --当前页数
ORDER BY EMPNO DESC;
(二)、根据rownum分组
SELECT *
FROM (SELECT T.*, ROWNUM RN
FROM (SELECT * FROM EMP ORDER BY EMPNO DESC) T
WHERE ROWNUM <= ( (currentPage-1) * pageSize + pageSize )) --每页显示几条
WHERE RN > ( (currentPage-1) * pageSize ); --当前页数
(三)、rowid和rownum
- 区别
两者都oracle中的伪列。(伪列即隐藏列)
rowid:是物理地址,用于唯一标识一条记录的物理位置,它是唯一且不会改变的。
rownum:根据查询的结果集给每行分配一个逻辑编号,它是动态可变的。
2.参考
参考文章一:https://blog.youkuaiyun.com/yu102655/article/details/52370542
参考文章二:https://blog.youkuaiyun.com/zdp072/article/details/25384757