zoukankan      html  css  js  c++  java
  • Oracle伪列rownum

    Oracle基础知识:伪列rownum,伪列就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。

    在查询的结果集中,ROWNUM为结果集中每一行标识一个行号,第一行返回1,第二行返回2,以此类推。通过ROWNUM伪列可以限制查询结果集中返回的行数。

    ROWNUM与ROWID不同,ROWID是插入记录时生成,ROWNUM是查询数据时生成。ROWID标识的是行的物理地址。ROWNUM标识的是查询结果中的行的次序。

    例题:

    SELECT S.* FROM SCORE S



    案例1:查询出成绩表中前5个学生的sno、cno、degree

    SELECT S.*, ROWNUM FROM SCORE S WHERE ROWNUM <= 5



    案例2:查询出成绩最高的前5名学生的sno、cno、degree。

    “成绩最高的前5名”需要先降序排序,再取前5名,但是生成ROWNUM操作比排序要早,排序时已经连同ROWNUM一起排序了,因此不能直接在案例1的语句中直接加上Order by,而是需要对排序的结果重新做二次查询,产生新的ROWNUM才能作为查询的条件依据。

    SELECT S1.*, ROWNUM
      FROM (SELECT S.* FROM SCORE S ORDER BY S.DEGREE DESC) S1
     WHERE ROWNUM <= 5



    案例3:查询出表score中第6条到第10条之间的记录。

    这是分页的应用,在查询条件中,如果查询条件中ROWNUM大于某一正整数,则不返还任何结果。

    SELECT *
      FROM (SELECT S.*, ROWNUM R FROM SCORE S WHERE ROWNUM <= 10)
     WHERE R > 5




    代码解析:

    ① 内部查询中得到ROWNUM 并且用别名R记录,供外层条件③使用。

    ② 内部查询的ROWNUM,与外出的ROWNUM列是平等的两列。

    ③ 使用的R是内层产生的ROWNUM,在外层看来,内层查询的ROWNUM是正常的一列。

  • 相关阅读:
    Hadoop安装配置(ubuntu-12.04.2-server-amd64)
    初识hadoop
    mybatis多表关联配置
    mybatis的详解
    SpringMVC学习笔记
    spring注解
    web filter用spring注入对象
    luence全文检索(数据库检索)
    C++ inline 函数
    Ubuntu16.04 QT5编译出现cannot find -lGL和collect2:error:ld r
  • 原文地址:https://www.cnblogs.com/sutao/p/7373976.html
Copyright © 2011-2022 走看看