取某个查询结果的前几条记录,在SqlServer中是很简单的,直接使用TOP关键字就可以,这里就不多说了。
SqlServer 2005中取前5条记录:
2 FROM MEMBER T
3 ORDER BY MEMBER_ID;
本篇主要介绍在Oracle中是如何取得某个查询结果的前几条记录的方法。
与SqlServer类似,Oracle也提供了提取前几条查询记录的关键字ROWNUM,但是有不少人在实际使用时,总是把ROWNUM用错,下举例为证:
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:
FROM SCOTT.EMP
WHERE ROWNUM < 6
ORDER BY HIREDATE;
执行结果:
EMPNO ENAME HIREDATE
---------- ---------- --------
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:
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语句的执行,这个问题留给有兴趣的朋友,
下次再告诉大家。