分页查询

mac2022-06-30  26

*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;

转载于:https://www.cnblogs.com/yunman/p/5497563.html

最新回复(0)