在oracle中實現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的
時候,即為我
們的標題講的結果。
實際上,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的方法
在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 列...