zoukankan      html  css  js  c++  java
  • oracle 分页其实一个子查询就好了,没理解的自然只能见样学样

    1.首先rownum是一个查询缓存级别的东西,所以以下写法是错误的
    select rownum rn,a.* from  student a where rn<=5;
    因为rn其实不是student表的内容,看做一个缓存编号就好
    但是有些人不服了,加个a.rn<=5
    select rownum rn,a.* from  student a where a.rn<=5;结果还是不行,这下相信了吧
     那么oracle的分页可以这样写吗
     select * from rsk_book where  rownum<=5 and rownum>=2;奇怪了oracle的rownum没用了吗,开下脑洞,换个方向
    select * from rsk_book where  rownum>=2 and rownum<=5;
    结果发现还是不行,为什么呢??这是因为oracle rownum的查询默认是从1开始的,判断rownum>=2,那么默认第一条不成立,就跳到第二条,结果第二条的rownum又是从1开始,以此类推条件永不成立,所以查询结果就是空的
    2. 那么分页究竟什么写呢,把分页的rownum存成子表
       这样写吗,  select * from (select rownum rn, a.* from studenta  where rownum<=5 )
    
    where rownum>=2  ;(原因看1.的永不成立的理论)
    正确写法是这样的,弄个中间结果
    
    select * from (select rownum rn, a.* from studenta  where rownum<=5 )
    
    where rn>=2  ;
    我们发现只要1个子查询就能完成分页了,那网上和一些教学视频为什么会出现两个子查询呢,我想这只是见样学样,来源于脑洞的模仿
    select * from (select rownum rn,a1.* from (select * from rsk_book) a1 where rownum <=5) where rn>=2;(3个select2个子查询),有些东西还是要动动脑子的。
  • 相关阅读:
    事务
    XML小总结
    java中array,arrayList,iterator;
    MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)
    RHCE7认证学习笔记17——KickStart安装系统
    CentOS中安装MySQL数据库
    centos下搭建svn服务器端/客户端
    AWS安装CDH5.3-CentOS6.4中关键操作步骤
    AWS安装CDH5.3-CentOS6.4
    [转]Servlet 工作原理解析
  • 原文地址:https://www.cnblogs.com/kexb/p/6493116.html
Copyright © 2011-2022 走看看