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