zoukankan      html  css  js  c++  java
  • 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语句的执行,这个问题留给有兴趣的朋友,

    下次再告诉大家。

  • 相关阅读:
    《Spring in action 4》(十一)SSM + Redis
    git 上传时报文件已存在的错
    JQuery--find与filter
    初识mysql
    并发--模块整理
    守护进程与守护线程
    用string模块生成随机验证码
    loggin 模块及其单例模式
    TCP协议--黏包现象
    网络编程---tcp/udp协议
  • 原文地址:https://www.cnblogs.com/flycatorg/p/1749832.html
Copyright © 2011-2022 走看看