ORACLE中查詢第n條到第m條的資料記錄的方法

來源:互聯網
上載者:User

一、經過測試,下面的方法通過:

 

SELECT * FROM
             (
                 SELECT 表名.*, ROWNUM AS CON FROM 表名 WHERE ROWNUM <= M AND 其它查詢條件 ORDER BY 排序條件 
             )
WHERE CON >=N;

 

二、參考其它網上的方法

 

SQL/Oracle取出第 m 條到第 n 條記錄的方法

 

用一句SQL取出第 m 條到第 n 條記錄的方法

用一句SQL取出第 m 條到第 n 條記錄的方法

從Table 表中取出第 m 條到第 n 條的記錄:(Not In 版本)

SELECT TOP n-m+1 *

FROM Table

WHERE (id NOT IN (SELECT TOP m-1 id FROM Table ))

--從TABLE表中取出第m到n條記錄 (Exists版本)

SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists

(Select * From (Select Top m-1 * From TABLE order by id) b Where b.id=a.id )

Order by id

--m為上標,n為下標,例如取出第8到12條記錄,m=8,n=12,Table為表名

Select Top n-m+1 * From Table

Where Id>(Select Max(Id) From

(Select Top m-1 Id From Table Order By Id Asc) Temp)

Order By Id Asc

#1樓 [樓主] 2007-03-02 10:38 Athrun

直接取得資料庫中的分頁記錄

前提是表中必須有主鍵

取得第M條記錄之後的N條記錄:

SELECT TOP N *

FROM [TABLE]

WHERE (ID NOT IN

(SELECT TOP M id

FROM [TABLE]

ORDER BY [ORDER]))

ORDER BY [ORDER]

Oracle中的實現,取得第M到N條記錄: SELECT * FROM

(

SELECT * , ROWNUM AS CON FROM

(

SELECT * FROM [TABLE] ORDER BY [ORDER]

)

WHERE ROWNUM <= N

)

WHERE CON >= M;

回複 引用 查看

查詢表中連續的某幾條記錄

不要傳任何列的條件參數,查詢表中連續的某幾條記錄

如:表A,id列為主鍵

id name sex age

-------------------------

1 luoyi male 21

2 yaya female 20

3 lili female 22

4 wuyong male 25

.......................

這個表的記錄還有很多,如果我想取第二、第三條記錄,不為別的,我就想要這兩條,這不僅在編程中會用到,而且在一些公司面試時也有類似考題(呵呵,我沒有遇到過),在oracle和mssqlserver中SQL代碼分別為:

一、Oracle

在oracle中不能用top關鍵字,而用rownum,有兩種方法可以實現

1.(select * from A where rownum <= 4) minus (select * from A where rownum <= 1)

這樣就得到了二、三兩條記錄了。minus 關鍵字的意思是求兩個結果集的差集,在數學中有這個概念,比如說兩個集合可以合并、公有、差集.

2. select * from (select * from A where rownum < 4) b where b.id not in(select id from A where rownum <2)  這句代碼也可以實。主要運用了not in運算子

二、ms sql server

在server中沒有minus,只能用類似於oracle的第二種方法

select * from (select top 3 * from A) as b where b.id not in(select top 1 id from A)

三、繪製出來的結果為:

id name sex age

--------------------------------

2 yaya female 20

3 lili female 22

回複 引用 查看

查詢資料庫中的N條記錄,然後,對這N條記錄排序

看到這個主題,有些人,都會寫出這個一句來,

select top 10 * from tablename order by createtime

這條語句的意思正好和主題相反

正確答案1:

select top 10 * from TableName where id in(select top 10 id from TableName order by id) order by createtime

這條語句,就可以找出表中的前10條的記錄,然後以createtime時間排序

要求是表中需要有一個主鍵

答案2

沒有主鍵也可以

SELECT *

FROM (SELECT TOP 10 *

FROM titles) mm

ORDER BY pubdate DESC

回複 引用 查看

隨機取出若干條記錄的SQL語句

Sql server:

select top 20 * from 表 order by newid()

Access:

SELECT top 20 * FROM 表 ORDER BY Rnd(id)

Rnd(id) 其中的id是自動編號欄位,可以利用其他任何數值來完成

比如用姓名欄位(UserName)

SELECT top 20 * FROM 表 ORDER BY Rnd(len(UserName))

MySql:

Select * From 表 Order By rand() Limit 20

回複 引用 查看

作者:yanek

email:yanek@126.com

特點:一次查詢,資料庫只返回一頁的資料。而不是取出所有的資料。

說明:

pagesize: 每頁顯示記錄數

cureentpage:當前頁數

select * from ( select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC

例子說明:

假如資料庫表如下:

user_table:

id:主鍵,自增

username:字元

password:字元

假設有80條記錄,每頁顯示10條記錄,id 從1到80

現在按照id升序排列取出第三頁的資料應該為:所取得記錄的id 應該為 21到30。

這時該語句應該為:

select * from ( select TOP 10 * FROM ( SELECT TOP 30 * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC

原理如下:

先按照id從小到大升序取出30條記錄(3*10),也就是:id 在 1-30 之間的記錄 (SELECT TOP 30 * from user_table ORDER BY id ASC)

然後按照ID降序排列這30條記錄,得到記錄為id 在:從30到 1

然後在這些30條記錄中取出前10條記錄:取得的記錄為:id 在30-21之間。這就是我們需要的資料,但這時是按照降序排列的,不符合要求。

最後在重新排序得到最終我們需要的資料。id在21-30之間

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.