1.分頁
要實現分頁 某一頁 必須知道資料 從**開始 到**結束
假設 每頁顯示十條資料
第n頁 開始 結束
1 1 10
2 11 20
3 21 30
n (n-1)10+1 n10
結論:分頁
第n頁的資料 第(n-1)10+1 ------ n10
mysql從0開始計數 oracle/sqlserver從1開始計數
mysql實現分頁
limit 開始,多少條
mysql :從0開始計數
第n頁 開始 結束
0 0 9
1 10 19
2 20 29
n n*10 (n+1)*10-1
第0頁
select
*from student limit0,
10;
第一頁
select
*from student limit10,
10;
第2頁
select
*from student limit20,
10
第n頁
select
*from student limit (n*10)
,10;
select
*from student limit 頁數*頁面大小,頁面大小;
oracle分頁
第n頁 開始 結束
1 1 10
2 11 20
3 21 30
n (n-1)10+1 n10
select
*from student where snow >=(n-
1)*10+1
and sno<= n*
10----此種方法存在漏洞 前提是必須id值連續
使用偽列
select rownum , t.* from student t where rownum >=(n-1)*10+1 and rownum<= n*10 order by sno;
-----
order by sno 根據sno排序 如果根據sno排序 則rownum會混亂
rownum 特性: 不能查詢大於的資料
解決方案
分開使用
1.先只排序
select s.* from student s order by sno asc;
—將其當成一張表
2.
select rownum t.
*from(select s.
*from student s order
by sno asc)t where rownum >=(n-
1)*10+1
and rownum<= n*
10
rownum不能大於 所以我們需要把rownum變成普通列
oracle分頁查詢
select q.*from
( 第三步:將偽列rownum變成普通列 然後新增條件進行查詢 實現分頁
select rownum t.* from
( 第二步:新增偽列rownum
select s.* from student s order by sno asc) t
第一步:現根據sno進行排序
)
where rownum >=
(n-1)*10+
1and rownum<= n*
10;
sqlserver分頁查詢 2005版本之後支援的
row_num()
需要制定哪一列作為row_num()進行預處理
select q.
*from
(select row_num(
)over
(sno order
by sno asc
)as r,
*from student where r<=
10*n )
where row_num(
)>=
(n-1)*10+
1and row_num(
)<= n*
10;
2003版本 支援top
top排序
select
top 頁面大小 *
from student where id notin(
select
top(頁數-1)
*頁面大小 id from student by sno asc; )
此種方法弊端 如果id值不連續 這不能保證 每頁資料量相等
2012之後支援的
offset
fetch
next only
select
*from student order
by sno
offset
(頁數-1)
*頁面大小+
1rows
fetch
next 頁面大小 rows only;
sql server 與oracle 的分別
1.關鍵字不一樣
rownum row_num()
2.排序
oracle為了排序 單獨寫了乙個子查詢
sqlserver中可以省略該排序的子查詢 可以通過over()直接進行子查詢
SQL實現分頁
表中主鍵必須為標識列,id int identity 1,1 1 分頁方案一 利用not in和select top分頁 語句形式 select top 10 from 表 where id not in select top20id from 表 order by id ast order by ...
SQL學習之索引記錄
首先還是老規矩,把用到的表貼出來,表名emp 在where子句中不能直接使用別名,這是因為where的執行順序在select之前,也就是說,在通過where子句對資料進行篩選的時候,別名並不存在。在示例表中 sal 字段表示工資,如果員工的工資少於2000,則返回no,如果超過4000,則返回yes...
SQL之查詢某幾行記錄 分頁查詢
oracle 1 查詢前10行 select from sc objects where rownum 10 2 利用minus 查詢10到20行 select from sc objects where rownum 20 minus select from sc objects where ro...