最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

在Oracle数据库中查询表中的前几条数据

来源:动视网 责编:小OO 时间:2025-09-26 11:00:05
文档

在Oracle数据库中查询表中的前几条数据

Oracle数据库实现获取前几条数据的方法数据库2011-03-1516:57:42阅读21评论0  字号:大中小 订阅如何在Oracle数据库中实现获取前几条数据的方法呢?就是类似SQL语句中的SELECTTOPN的方法。本文将告诉您答案,举例说明了哟!1.在Oracle中实现SELECTTOPN: 由于ORACLE不支持SELECTTOP语句,所以在ORACLE中经常是用ORDERBY跟ROWNUM的组合来实现SELECTTOPN的查询。 简单地说,实现方法如下所示: SELECT列名1.
推荐度:
导读Oracle数据库实现获取前几条数据的方法数据库2011-03-1516:57:42阅读21评论0  字号:大中小 订阅如何在Oracle数据库中实现获取前几条数据的方法呢?就是类似SQL语句中的SELECTTOPN的方法。本文将告诉您答案,举例说明了哟!1.在Oracle中实现SELECTTOPN: 由于ORACLE不支持SELECTTOP语句,所以在ORACLE中经常是用ORDERBY跟ROWNUM的组合来实现SELECTTOPN的查询。 简单地说,实现方法如下所示: SELECT列名1.
Oracle数据库实现获取前几条数据的方法

数据库 2011-03-15 16:57:42 阅读21 评论0   字号:大中小 订阅 

如何在Oracle数据库中实现获取前几条数据的方法呢?就是类似SQL语句中的SELECT TOP N的方法。本文将告诉您答案,举例说明了哟! 

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

10 tenth

11 last 

则按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.在TOP N纪录中抽出第M(M <= N)条记录: 

 

在得到了TOP N的数据之后,为了抽出这N条记录中的第M条记录,我们可以考虑从ROWNUM着手。我们知道,ROWNUM是记录表中数据编号的一个隐藏子段,所以可以在得到TOP N条记录的时候同时抽出记录的ROWNUM,然后再从这N条记录中抽取记录编号为M的记录,即是我们希望得到的结果。 

 

从上面的分析可以很容易得到下面的SQL语句: 

 

SELECT 列名1...列名n FROM 

 ( 

 SELECT ROWNUM RECNO, 列名1...列名nFROM 

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n) 

 WHERE ROWNUM <= N(抽出记录数) 

ORDER BY ROWNUM ASC 

 ) 

WHERE RECNO = M(M <= N) 

同样以上表的数据为基础,那么得到以NAME的字母顺排序的第二个顾客的信息的SQL语句应该这样写: 

 

SELECT ID, NAME FROM 

 ( 

SELECT ROWNUM RECNO, ID, NAME FROM 

(SELECT * FROM CUSTOMER ORDER BY NAME) 

 WHERE ROWNUM <= 3

 ORDER BY ROWNUM ASC ) 

WHERE RECNO = 2 

结果则为: 

 

ID NAME

05 fifth 

3.抽出按某种方式排序的记录集中的第N条记录: 

 

在2的说明中,当M = N的时候,即为我们的标题第三点所讲的结果。实际上,第二点的做法在里面N>M的部分的数据是基本上不会用到的,我们仅仅是为了说明方便而采用。 

 

如上所述,则SQL语句应为: 

 

SELECT 列名1...列名n FROM 

 ( 

SELECT ROWNUM RECNO, 列名1...列名nFROM 

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n) 

 WHERE ROWNUM <= N(抽出记录数) 

ORDER BY ROWNUM ASC 

 ) 

 WHERE RECNO = N 

 那么,2中的例子的SQL语句则为: 

SELECT ID, NAME FROM 

SELECT ROWNUM RECNO, ID, NAME FROM 

 (SELECT * FROM CUSTOMER ORDER BY NAME) 

WHERE ROWNUM <= 2

ORDER BY ROWNUM ASC 

WHERE RECNO = 2 

结果为: 

 

ID NAME

05 fifth 

4.抽出按某种方式排序的记录集中的第M条记录开始的X条记录: 

 

上一点所讲的仅仅是抽取一条记录的情况,当我们需要抽取多条记录的时候,此时在第二点中的N的取值应该是在N >= (M + X - 1)这个范围内,当然最经济的取值就是取等号的时候了。当然最后的抽取条件也不是RECNO = N了,应该是RECNO BETWEEN M AND (M + X - 1)了,所以随之而来的SQL语句则为: 

 

SELECT 列名1...列名n FROM 

 SELECT ROWNUM RECNO, 列名1...列名nFROM 

(

SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n) 

WHERE ROWNUM <= N (N >= (M + X - 1)) 

ORDER BY ROWNUM ASC 

 WHERE RECNO BETWEEN M AND (M + X - 1) 

同样以上面的数据为例,则抽取NAME的字母顺的第二条记录开始的3条记录的SQL语句为: 

 

SELECT ID, NAME FROM 

 ( 

SELECT ROWNUM RECNO, ID, NAME FROM 

(SELECT * FROM CUSTOMER ORDER BY NAME) 

WHERE ROWNUM <= (2 + 3 - 1)

ORDER BY ROWNUM ASC 

 ) 

 WHERE RECNO BETWEEN 2 AND (2 + 3 - 1) 

结果如下: 

 

ID NAME

05 fifth

01 first

04 forth 

以此为基础,再扩展的话,做成存储过程,将开始记录数以及抽取记录数为参数,就可以轻松实现分页抽取数据。

文档

在Oracle数据库中查询表中的前几条数据

Oracle数据库实现获取前几条数据的方法数据库2011-03-1516:57:42阅读21评论0  字号:大中小 订阅如何在Oracle数据库中实现获取前几条数据的方法呢?就是类似SQL语句中的SELECTTOPN的方法。本文将告诉您答案,举例说明了哟!1.在Oracle中实现SELECTTOPN: 由于ORACLE不支持SELECTTOP语句,所以在ORACLE中经常是用ORDERBY跟ROWNUM的组合来实现SELECTTOPN的查询。 简单地说,实现方法如下所示: SELECT列名1.
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top