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...列名n
from
(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...列名n
from
(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...列名n
from (
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 列名 列名 from ...
在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 列...