在ORACLE中實現SELECT TOP N的方法

2022-02-28 03:02:00 字數 3752 閱讀 9104

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的

時候,即為我

們的標題講的結果。

實際上,2的做法在裡面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條

記錄3裡所講得

僅僅是抽取一條

記錄的情況,當我

們需要抽取多條記錄的

時候,此

時在2中的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的字母

順的第2條

記錄開始的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中實現SELECT TOP N的方法

1.在oracle中實現 select top n 由於oracle 不支援select top 語句,所以在 oracle中經 常是用order by 跟rownum的組 合來實現 select top n的查詢 簡單 地說,實現 方法如下所示 select 列名 列名 from select 列...

在ORACLE中實現SELECT TOP N的方法

1.在oracle中實現select top n 由於oracle不支援select top語句,所以在oracle中經常是用order by跟rownum的組合來實現select top n的查詢。簡單地說,實現方法如下所示 select 列名 列名 from select 列名 列名 from ...

在ORACLE中實現SELECT TOP N的方法

1.在oracle中實現 select top n 由於 oracle 不支援select top 語句,所以在 oracle中經 常是用order by 跟rownum的組 合來實現 select top n的查詢 簡單地 說,實現方法如下所示 select 列名 列名 from select 列...