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

2021-12-29 23:27:40 字數 3723 閱讀 4099

sql/oracle取出第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  

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

前提是表中必須有主鍵

取得第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 *** 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 *** 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

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

說明: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之間。

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...

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

分頁或者分段呼叫資料的時候很有用的啊 從table 表中取出第 m 條到第 n 條的記錄 color red not in 版本 color select top n m 1 from table where id not in select top m 1 id from table color ...

從Table 表中取出第 m 條到第 n 條的記錄

從table 表中取出第 m 條到第 n 條的記錄 not in 版本 select topn m 1 from table where id notin select topm 1 id from table 從table表中取出第m到n條記錄 exists版本 select topn m 1 f...