當前位置:首頁 » 編程語言 » sqlrownum分頁

sqlrownum分頁

發布時間: 2022-05-05 04:50:00

1. sql語句分頁查詢的問題

select rownum row_id,a,c1,b,c2 from (select car.a,uni1.c as c1,car.b,uni2.c as c2 from card car,unit uni1,unit uni2 where car.a=uni1.d and car.b=uni2.d) tb1 where row_id between 1 and 100

兩個c就分開了

2. 求SQL分頁的語句

2個參數Start end
start 開始 end 結束
例如第二頁從Start11條開始 結束end 21百

select * from (select rownum a,NEWS.* from NEWS where rownum<='"+end+"') b where b.a>'"+start+"'"

方法2 select * from NEWS limit a,b
a就是從第幾條開始 b就是查詢出的條數
例如 從第10條開始後的10條select * from NEWS limit 10,10
從第6條開始後的8條select * from NEWS limit 6,8

3. SQl語句查詢排名分頁

假設成績表為score,score列為分數,stuno為學號,student表為學生信息表,sutno為學號,name為學生姓名,endNum和startNum是頁碼,需要前端傳入;
SELECT * FROM (select row_.*, rownum start_rownum_ from (
sum(t.score) 總分,
t1.name 姓名

from score t,student t1
where t1.stuno=t.stuno
group by t1.name
order by t.stuno
) row_ WHERE rownum < #endNum# ) WHERE start_rownum_ >= #startNum#

4. 如何使用sql語句進行分頁操作

sql語句是不能進行分頁操作的,它只查出一個相應條件的數據記錄集。而分頁操作,是由程序員用相應的軟體開發語言設計演算法,而過進行分頁操作。謝謝

5. hibernate訪問oracle分頁SQL語句rownum子查詢問題

第一個是從第幾條開始,第二個是每頁幾條。
你看看你資料庫裡面的數據夠不夠分頁,你這樣只寫兩句就分頁是不夠的。
page = Paginator.showPage(, hql, paramValues, pageCurrent, pageSize);

/*
* 利用hql實現翻頁
*/
public static Page showPage(PersistentBaseDao p, String hql,
Object[] paramValues, int pageCurrent, int pageSize) {
// 入口參數校驗(無)
if (p == null) {
// log.debug("Paginator.p.hql is Empty");
}
if (hql.equals("") || hql == null) {
// log.debug("Paginator.showPage.hql is Empty");
}
if (p == null) {
// log.debug("Paginator.showPage.p is Empty");
}
PersistentBaseDao = (PersistentBaseDao) p;
// 如果當前頁大於>總的頁數,則讓當前頁等於總頁數
int tempPageCount =0;

if (paramValues == null) {
tempPageCount = .getPageCount(hql, (Object[]) null, pageSize);
} else {
tempPageCount= .getPageCount(hql, paramValues, pageSize);
}
if (pageCurrent > tempPageCount) {
pageCurrent = tempPageCount;
}
// 如果當前頁大於<1,則讓當前頁等於1
if (pageCurrent < 1) {
pageCurrent = 1;
}
// 調用.serarch()方法
if (paramValues == null) {
page = .search(hql, pageCurrent, pageSize);
} else {
page = .search(hql, paramValues, pageCurrent, pageSize);
}
// 為page對象設置當前頁的屬性
page.setPageCurrent(pageCurrent);
// 將page對象放在request對象中
return page;
}

/*
* 利用List實現翻頁
*/
@SuppressWarnings("unchecked")
public static Page showPage(List list, int pageCurrent, int pageSize) {
// 入口參數校驗(無)
if (list.isEmpty()) {
// log.debug("Paginator.showPage.list is Empty");
}
// 如果當前頁大於>總的頁數,則讓當前頁等於總頁數
if (pageCurrent > page.getPageCount()) {
pageCurrent = page.getPageCount();
}
// 如果當前頁大於<1,則讓當前頁等於1
if (pageCurrent < 1) {
pageCurrent = 1;
}
List ls = new ArrayList();
// 根據得到的list轉化為page對象
if (list.size() % pageSize == 0) {
page.setPageCount((list.size() / pageSize));
} else {
page.setPageCount((list.size() / pageSize) + 1);
}
page.setPageCurrent(pageCurrent);
page.setRecordCound(list.size());
int stag = (pageCurrent - 1) * pageSize;
int etag = pageCurrent * pageSize;
for (int i = stag; i < list.size() && i < etag; i++) {
ls.add(list.get(i));
}
page.setDataList(ls);
return page;
}

6. oracle中使用rownum分頁,請教一下數據的順序會變嗎

第一次的rownum是oracle中的一個虛擬列你說的rn是給這個rownum起的別名,也就是在子查詢中的別名要在外查詢中調用oracle中的分頁查詢不止是只有rownum還可以用row_number等函數(不過這個是根據某個欄位排序後的排名,這個在數據量較大的情況下很影響查詢效率),不過這個的調用方式也跟上邊的那個類似,並且,這個row_number函數在sqlserver中也是可以使用的,具體的你可以搜索一下

7. 用SQL寫出分頁查詢

SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A --不排序
WHERE ROWNUM <= 40
)
WHERE RN >= 21;

SELECT *
FROM (SELECT a.*, row_number() over(ORDER BY 1) rn--假排序,速度同上
FROM t1 a)
WHERE rn BETWEEN 21 AND 40;

SELECT *
FROM (SELECT a.*, row_number() over(ORDER BY c1) rn --真實排序,無法比較速度
FROM t1 a)
WHERE rn BETWEEN 21 AND 40;

Oracle的分頁查詢語句基本上可以按照本文給出的格式來進行套用。
分頁查詢格式:

SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21

其中最內層的查詢SELECT * FROM TABLE_NAME表示不進行翻頁的原始查詢語句。ROWNUM <= 40和RN >= 21控制分頁查詢的每頁的范圍。

上面給出的這個分頁查詢語句,在大多數情況擁有較高的效率。分頁的目的就是控制輸出結果集大小,將結果盡快的返回。在上面的分頁查詢語句中,這種考慮主要體現在WHERE ROWNUM <= 40這句上。

選擇第21 到40條記錄存在兩種方法,一種是上面例子中展示的在查詢的第二層通過ROWNUM <= 40來控制最大值,在查詢的最外層控制最小值。而另一種方式是去掉查詢第二層的WHERE ROWNUM <= 40語句,在查詢的最外層控制分頁的最小值和最大值。這是,查詢語句如下:

SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
)
WHERE RN BETWEEN 21 AND 40

對比這兩種寫法,絕大多數的情況下,第一個查詢的效率比第二個高得多。

這是由於CBO 優化模式下,Oracle可以將外層的查詢條件推到內層查詢中,以提高內層查詢的執行效率。對於第一個查詢語句,第二層的查詢條件WHERE ROWNUM <= 40就可以被Oracle推入到內層查詢中,這樣Oracle查詢的結果一旦超過了ROWNUM限制條件,就終止查詢將結果返回了。

而第二個查詢語句,由於查詢條件BETWEEN 21 AND 40是存在於查詢的第三層,而Oracle無法將第三層的查詢條件推到最內層(即使推到最內層也沒有意義,因為最內層查詢不知道RN代表什麼)。因此,對於第二個查詢語句,Oracle最內層返回給中間層的是所有滿足條件的數據,而中間層返回給最外層的也是所有數據。數據的過濾在最外層完成,顯然這個效率要比第一個查詢低得多。

上面分析的查詢不僅僅是針對單表的簡單查詢,對於最內層查詢是復雜的多表聯合查詢或最內層查詢包含排序的情況一樣有效。

這里就不對包含排序的查詢進行說明了,下一篇文章會通過例子來詳細說明。下面簡單討論一下多表聯合的情況。對於最常見的等值表連接查詢,CBO 一般可能會採用兩種連接方式NESTED LOOP和HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不會考慮)。在這里,由於使用了分頁,因此指定了一個返回的最大記錄數,NESTED LOOP在返回記錄數超過最大值時可以馬上停止並將結果返回給中間層,而HASH JOIN必須處理完所有結果集(MERGE JOIN也是)。那麼在大部分的情況下,對於分頁查詢選擇NESTED LOOP作為查詢的連接方法具有較高的效率(分頁查詢的時候絕大部分的情況是查詢前幾頁的數據,越靠後面的頁數訪問幾率越小)。

因此,如果不介意在系統中使用HINT的話,可以將分頁的查詢語句改寫為:

SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21

8. 幾種常見SQL分頁方式效率比較,一帖子

sqlserver分頁 第一種分頁方法 需用到的參數: pageSize 每頁顯示多少條數據 pageNumber 頁數 從客戶端傳來 totalRecouds 表中的總記錄數 select count (*) from 表名 totalPages 總頁數 totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1 pages 計算前pages 條數據 pages= pageSize*(pageNumber-1) SQL語句: select top pageSize * from 表名 where id not in (select top pages id from 表名 order by id) order by id 第二種分頁方法 pageSize 每頁顯示多少條數據 pageNumber 頁數 從客戶端傳來 pages=pageSize*(pageNumber-1)+1 select top pageSize * from 表名 where id>=(select max(id) from (select top pages id from 表名 order by id asc ) t ) mysql分頁 需用到的參數: pageSize 每頁顯示多少條數據 pageNumber 頁數 從客戶端傳來 totalRecouds 表中的總記錄數 select count (*) from 表名 totalPages 總頁數 totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1 pages 起始位置 pages= pageSize*(pageNumber-1) SQL語句: select * from 表名 limit pages, pageSize; mysql 分頁依賴於關鍵字 limit 它需兩個參數:起始位置和pageSize 起始位置=頁大小*(頁數-1) 起始位置=pageSize*(pageNumber -1) oracle分頁 pageSize 每頁顯示多少條數據 pageNumber 頁數 從客戶端傳來 totalRecouds 表中的總記錄數 select count (*) from 表名 totalPages 總頁數 totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1 startPage 起始位置 startPage= pageSize*(pageNumber-1)+1 endPage=startPage+pageSize SQL語句 select a.* from ( select rownum num ,t.* from 表名 t where 某列=某值 order by id asc )a where a.num>=startPage and a.num<endPage db2分頁 int startPage=1 //起始頁 int endPage; //終止頁 int pageSize=5; //頁大小 int pageNumber=1 //請求頁 startPage=(pageNumber-1)*pageSize+1 endPage=(startPage+pageSize); SQL語句 select * from (select 欄位1,欄位2,欄位3,欄位4,欄位5,rownumber() over(order by 排序欄位 asc ) as rowid from 表名 )as a where a.rowid >= startPage AND a.rowid <endPage access分頁 pageSize 每頁顯示多少條數據 pageNumber 頁數 從客戶端傳來 pages=pageSize*(pageNumber-1)+1 SQL語句 select top pageSize * from 表名 where id>=(select max(id) from (select top pages id from 表名 order by id asc ) t )

9. 幾種流行的資料庫SQL分頁

sqlserver分頁
第一種分頁方法
需用到的參數:
pageSize每頁顯示多少條數據
pageNumber頁數從客戶端傳來
totalRecouds表中的總記錄數selectcount(*)from表名
totalPages總頁數
totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
pages計算前pages條數據
pages=pageSize*(pageNumber-1)
SQL語句:
selecttoppageSize*from表名whereidnotin(selecttoppagesidfrom表名orderbyid)orderbyid
第二種分頁方法
pageSize每頁顯示多少條數據
pageNumber頁數從客戶端傳來
pages=pageSize*(pageNumber-1)+1
selecttoppageSize*from表名whereid>=(selectmax(id)from(selecttoppagesidfrom表名orderbyidasc)t)

mysql分頁
需用到的參數:
pageSize每頁顯示多少條數據
pageNumber頁數從客戶端傳來
totalRecouds表中的總記錄數selectcount(*)from表名
totalPages總頁數
totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
pages起始位置
pages=pageSize*(pageNumber-1)
SQL語句:
select*from表名limitpages,pageSize;
mysql分頁依賴於關鍵字limit它需兩個參數:起始位置和pageSize
起始位置=頁大小*(頁數-1)
起始位置=pageSize*(pageNumber-1)

oracle分頁
pageSize每頁顯示多少條數據
pageNumber頁數從客戶端傳來
totalRecouds表中的總記錄數selectcount(*)from表名
totalPages總頁數
totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
startPage起始位置
startPage=pageSize*(pageNumber-1)+1
endPage=startPage+pageSize
SQL語句
selecta.*from
(
selectrownumnum,t.*from表名twhere某列=某值orderbyidasc
)a
wherea.num>=startPageanda.num<endPage

db2分頁
intstartPage=1//起始頁
intendPage;//終止頁
intpageSize=5;//頁大小
intpageNumber=1//請求頁

startPage=(pageNumber-1)*pageSize+1
endPage=(startPage+pageSize);


SQL語句
select*from(select欄位1,欄位2,欄位3,欄位4,欄位5,rownumber()over(orderby排序欄位asc)asrowidfrom表名)asawherea.rowid>=startPageANDa.rowid<endPage

access分頁
pageSize每頁顯示多少條數據
pageNumber頁數從客戶端傳來
pages=pageSize*(pageNumber-1)+1
SQL語句
selecttoppageSize*from表名whereid>=(selectmax(id)from(selecttoppagesidfrom表名orderbyidasc)t)

10. hql rownum分頁

createQuery("select rownum no,ID from DTVS.DTVS_USER order by ID desc").setFirstResult(3).setMaxResults(2).list();
第3,4條記錄.

熱點內容
sql創建鏈接 發布:2025-07-08 00:08:38 瀏覽:398
ftp上傳中斷 發布:2025-07-08 00:08:37 瀏覽:641
linux雲計算課程 發布:2025-07-08 00:07:23 瀏覽:23
安卓網易雲怎麼發布歌曲 發布:2025-07-07 23:42:29 瀏覽:626
安卓內存讀取腳本 發布:2025-07-07 23:42:19 瀏覽:871
python27漢化 發布:2025-07-07 23:42:18 瀏覽:721
源碼鎖屏 發布:2025-07-07 23:26:52 瀏覽:944
手機版編程軟體 發布:2025-07-07 22:57:22 瀏覽:122
linux下執行sh腳本 發布:2025-07-07 22:49:00 瀏覽:127
雲盤怎麼存儲資料 發布:2025-07-07 22:49:00 瀏覽:915