• Oracle 10g 前n条查询记录的取得方法


    取某个查询结果的前几条记录,在SqlServer中是很简单的,直接使用TOP关键字就可以,这里就不多说了。

    SqlServer 2005中取前5条记录:

    1 SELECT TOP 5 T.MEMBER_ID,T.MEMBER_NAME
    2 FROM MEMBER T
    3 ORDER BY MEMBER_ID;

    本篇主要介绍在Oracle中是如何取得某个查询结果的前几条记录的方法。

    与SqlServer类似,Oracle也提供了提取前几条查询记录的关键字ROWNUM,但是有不少人在实际使用时,

    总是把ROWNUM用错,下举例为证:

    SELECT EMPNO,ENAME,HIREDATE
    FROM SCOTT.EMP
    ORDER BY HIREDATE ASC;

    执行结果:

        EMPNO ENAME      HIREDATE
    ---------- ---------- -------- 

                                                      前5条

          7369 SMITH      80-12-17
          7499 ALLEN      81-02-20
          7521 WARD       81-02-22
          7566 JONES      81-04-02
          7698 BLAKE      81-05-01     

         7782 CLARK      81-06-09
          7844 TURNER     81-09-08
          7654 MARTIN     81-09-28
          7839 KING       81-11-17
          7900 JAMES      81-12-03
          7902 FORD       81-12-03
          7934 MILLER     82-01-23
          7788 SCOTT      87-04-19
          7876 ADAMS      87-05-23

    14行が選択されました。

    取前五条记录的SQL:

    SELECT EMPNO,ENAME,HIREDATE
    FROM SCOTT.EMP
    WHERE ROWNUM < 6
    ORDER BY HIREDATE;

    执行结果:

         EMPNO ENAME      HIREDATE
    ---------- ---------- --------

          7369 SMITH      80-12-17
          7499 ALLEN      81-02-20
          7521 WARD       81-02-22
          7566 JONES      81-04-02
          7654 MARTIN     81-09-28

    从上面的执行结果看,第五条数据和我们预想的不一样,这说明Oracle在Order by之前已经先解析了ROWNUM

    (有兴趣的朋友可以自己调试一下),下面我给出正确的取前5条记录的方法:

    取前五条记录的SQL:

    SELECT * 
    FROM ( SELECT EMPNO,ENAME,HIREDATE
    FROM SCOTT.EMP
    ORDER BY HIREDATE ) 
    WHERE ROWNUM < 6;

    执行结果:

         EMPNO ENAME      HIREDATE
    ---------- ---------- --------
          7369 SMITH      80-12-17
          7499 ALLEN      81-02-20
          7521 WARD       81-02-22
          7566 JONES      81-04-02
          7698 BLAKE      81-05-01

    完全正确。

    思考:

    取前N条记录的方法我们是找到了,那取第N条呢?应该也没什么难的,但是效率会如何呢?

    要知道SQL执行时最怕的就是Order by语句的执行,这个问题留给有兴趣的朋友,

    下次再告诉大家。

  • 相关阅读:
    java学习笔记(三)
    JAVA 学习笔记(2)
    java学习笔记
    第二次作业完成情况
    第一次作业完成情况
    使用MarkDown标记语言发博客
    《Java高级程序设计》第一周作业
    纪逝去的毕业后的两年时光
    #这是来联系Markdown语法的
    CodeFirst初体验——问题三
  • 原文地址:https://www.cnblogs.com/flycatorg/p/1749832.html
Copyright © 2020-2023  润新知