1、Oracle分页查询
现有表employee_tbl,要求按年龄降序,分页查询数据,每页3条数据。
ID NAME DATE SIGNIN AGE
1 小明 2016-04-22 15:25:33 1 23
2 小王 2016-04-20 15:25:47 3 22
3 小丽 2016-04-19 15:26:02 2 27
4 小王 2016-04-07 15:26:14 4 29
5 小明 2016-04-11 15:26:40 4 19
6 小明 2016-04-04 15:26:54 2 17
7 小朱 2020-07-19 19:24:51 3 21
8 小智 2020-07-19 19:25:08 2 21
第一步:按年龄降序查询数据:
SELECT * FROM "employee_tbl" e_tbl order by e_tbl."age" desc
第二步:使用rownum(伪列),将rownum标记为rn,查询所有数据:
SELECT ROWNUM rn,s.* from (SELECT * FROM "employee_tbl" e_tbl order by e_tbl."age" desc)s;
第三步:按rn进行筛选,得到分页数据,以查第二页为例:
SELECT * from (select ROWNUM rn,s.* from (SELECT * FROM "employee_tbl" e_tbl order by e_tbl."age" desc)s) where rn>=4 and rn<=6;
注意这里不能直接对rownum进行大于号比较,否则会一直查不到数据,以下的写法就是错误的(查第一个rownum对应的数据时发现不满足条件,然后后面的所有数据又分别作为第一个rownum,依然不满足条件,导致最后一条数据也没有):
select ROWNUM,s.* from (SELECT * FROM "employee_tbl" e_tbl order by e_tbl."age" asc)s where ROWNUM<=8 and ROWNUM>=5;
总体思想是从内向外写SQL,以本例来说明,内层先进行排序(如果内层先编号rownum,再排序,则rownum是错误的),第二层进行rownum编号,第三层根据rownum条件进行筛选。
分页查询公式:
分页查询,假设每一页有pageSize条数据,则第N页的起始行号是:pageSize*(N-1)+1,结束行号是:pageSize*N。(行号从1开始)
2、Oracle函数
主要包括单行函数、聚合函数两大类,从操作对象来看,主要分为数值、字符串、日期时间等。
https://blog.csdn.net/weixin_39805338/article/details/81002980