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语句的执行,这个问题留给有兴趣的朋友,

    下次再告诉大家。

  • 相关阅读:
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    8.4 确定两个日期之间的月份数或年数
    (Java实现) 洛谷 P1553 数字反转(升级版)
  • 原文地址:https://www.cnblogs.com/flycatorg/p/1749832.html
Copyright © 2011-2022 走看看