2.在TOP N紀(jì)錄中抽出第M(M <= N)條記錄
在得到了TOP N的數(shù)據(jù)之后,為了抽出這N條記錄中的第M條記錄,我們可以考慮從ROWNUM著手。我們知道,ROWNUM是記錄表中數(shù)據(jù)編號的一個隱藏子段,所以可以在得到TOP N條記錄的時候同時抽出記錄的ROWNUM,然后再從這N條記錄中抽取記錄編號為M的記錄,即使我們希望得到的結(jié)果。
從上面的分析可以很容易得到下面的SQL語句。
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的字母順排序的第二個顧客的信息的SQL語句應(yīng)該這樣寫:
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的說明中,當(dāng)M = N的時候,即為我們的標(biāo)題講的結(jié)果。實際上,2的做法在里面N>M的部分的數(shù)據(jù)是基本上不會用到的,我們僅僅是為了說明方便而采用。
如上所述,則SQL語句應(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語句則為:
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