1、在ORACLE中实现SELECT TOP N
由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用order by跟rownum 的组合来实现SELECT TOP N的查询。
实现方法如下所示:
SELECT 列名1...列名nFROM
( SELECT 列名1...列名nFROM 表名 order by 列名1...列名n)
WHERE rownum<= N // 抽出记录数
order by rownum asc;
例题:
顾客表customer(id,name)有如下数据:
ID NAME
01 first
02 Second
03 third
04 forth
05 fifth
06 sixth
07 seventh
08 eighth
09 ninth
则按NAME的字母顺序抽出前三个顾客的SQL语句如下所示:
SELECT * FROM
( SELECT * FROM CUSTOMER order by NAME )
WHERE rownum<= 3
order by rownum ASC;
输出结果为:
ID NAME
08 eighth
05 fifth
01 first
2、抽出按某种方式排序的记录集中的第N条记录
rownum是记录表中数据编号的一个隐藏子段,所以在得到TOP N条记录的时候同时抽出记录的rownum,然后再从这N条记录中抽取最后一条记录。
实现方法如下所示:
SELECT 列名1...列名n FROM
(
SELECT rownum RECNO, 列名1...列名n FROM
( SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n )
WHERE rownum<= N // 抽出记录数
order by rownum ASC
)
WHERE RECNO = N;