2.在TOP N紀(jì)錄中抽出第M(M <= N)條記錄
在得到了TOP N的數(shù)據(jù)之后,為了抽出這N條記錄中的第M條記錄,我們可以考慮從ROWNUM著手。我們知道,ROWNUM是記錄表中數(shù)據(jù)編號(hào)的一個(gè)隱藏子段,所以可以在得到TOP N條記錄的時(shí)候同時(shí)抽出記錄的ROWNUM,然后再?gòu)倪@N條記錄中抽取記錄編號(hào)為M的記錄,即使我們希望得到的結(jié)果。
從上面的分析可以很容易得到下面的SQL語(yǔ)句。
SELECT列名1...列名nFROM
(
SELECT ROWNUM RECNO,列名1...列名nFROM
(SELECT列名1...列名nFROM表名ORDER BY列名1...列名n)
WHERE ROWNUM <= N(抽出記錄數(shù))
ORDER BY ROWNUM ASC
)
WHERE RECNO = M(M <= N)
同樣以上表的數(shù)據(jù)為基礎(chǔ),那么得到以NAME的字母順排序的第二個(gè)顧客的信息的SQL語(yǔ)句應(yīng)該這樣寫(xiě):
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
結(jié)果則為:
ID NAME
05 fifth
3.抽出按某種方式排序的記錄集中的第N條記錄
在2的說(shuō)明中,當(dāng)M = N的時(shí)候,即為我們的標(biāo)題講的結(jié)果。實(shí)際上,2的做法在里面N>M的部分的數(shù)據(jù)是基本上不會(huì)用到的,我們僅僅是為了說(shuō)明方便而采用。
如上所述,則SQL語(yǔ)句應(yīng)為:
SELECT列名1...列名nFROM
(
SELECT ROWNUM RECNO,列名1...列名nFROM
(SELECT列名1...列名nFROM表名ORDER BY列名1...列名n)
WHERE ROWNUM <= N(抽出記錄數(shù))
ORDER BY ROWNUM ASC
)
WHERE RECNO = N
那么,2中的例子的SQL語(yǔ)句則為:
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
結(jié)果為:
ID NAME
05 fifth