1、在ORACLE中实现SELECT TOP N
由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用order by跟rownum的组合来实现SELECT TOP N的查询。
实现方法如下所示:
SELECT 列名1...列名n FROM
( SELECT 列名1...列名n FROM 表名 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 O, 列名1...列名n FROM
( SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n )
WHERE rownum<= N // 抽出记录数
order by rownum ASC
)
WHERE O = N;
例题:
同样以上表的数据为基础,得到以NAME的字母排序的第二个顾客的信息的SQL语句:
SELECT ID, NAME FROM
(
SELECT rownum O, ID, NAME FROM
( SELECT * FROM CUSTOMER order by NAME )
where rownum<= 2
order by rownum ASC
)
WHERE O = 2;
结果则为:
ID NAME
05 fifth
3、抽出按某种方式排序的记录集中的第M条记录开始的X条记录
当我们需要抽取多条记录的时候,此时在2中的N的取值应该是在N >= (M + X - 1)这个范围内,当然最后的抽取条件应该是 O between M and (M + X - 1) 之间。
SELECT 列名1...列名n FROM
(
SELECT rownum O, 列名1...列名n FROM
( SELECT 列名1...列名n FROM 表名 order by 列名1...列名n)
WHERE rownu
Oracle,Top-N 查询,分页查询 来自淘豆网m.daumloan.com转载请标明出处.