分頁sql(不完善,有錯誤)

要實現分頁,必須知道 某一頁的 數據 從哪裏開始 到哪裏結束

頁面大小:每頁顯示的數據量

MYSQL實現分頁的sql:

假設每頁顯示10條數據

mysql分頁:
mysql:從0開始計數
0		0		9
1		10		19
2		20		29
n		n*10	      (n+1)*10-1

結論:
分頁:
	第n頁的數據:  第(n-1)*10+1條  -- 第n*10條

limit 開始,多少條
0
select * from student limit 0,10 ;
第1頁
select * from student limit 10,10 ;
第2頁
select * from student limit 20,10 ;
第n頁
select * from student limit n*10,10

mysql的分頁語句:

select * from student limit 頁數*頁面大小,頁面大小

oracle分頁:

sqlserver/oracle:從1開始計數
第n頁 開始 結束
1 1 10
2 11 20
3 21 30
n (n-1)10+1 n10

select *from student where sno >=(n-1)10+1 and sno <=n10 ; --此種寫法的前提:必須是Id連續 ,否則 無法滿足每頁顯示10條數據

ORACLE\sqlserver都是從1開始計數: (n-1)10+1 — n10
oracle的分頁查詢語句:
select from
(
select rownum r, t.
from
(select s.* from student s order by sno asc) t 10000
)
where r>=(n-1)10+1 and <=n10 ; 10

優化:

select from
(
select rownum r, t.
from
(select s.* from student s order by sno asc) t
where rownum<=n*10
)
where r>=(n-1)*10+1 ;

select from
(
select rownum r, t.
from
(select s.* from student s order by sno asc) t
where rownum<=頁數*頁面大小
)
where r>=(頁數-1)*頁面大小+1 ;

SQLServer分頁: 3種分頁sql

row_number()	over(字段) ;

sqlserver2003:top  --此種分頁SQL存在弊端(如果id值不連續,則不能保證每頁數據量相等)
select top 頁面大小 * from student where id not in 
( select top (頁數-1)*頁面大小 id from student  order by sno asc )



sqlserver2005之後支持:
select *from 
(
	select row_number()  over (sno order by sno asc) as r,* from student
			
	 where r<=n*10 
)
where r>=(n-1)*10+1 and  ;	

SQLServer此種分頁sql與oralce分頁sql的區別: 1.rownum  ,row_number()    2.oracle需要排序(爲了排序,單獨寫了一個子查詢),但是在sqlserver 中可以省略該排序的子查詢  因爲sqlserver中可以通過over直接排序


sqlserver2012之後支持:	
offset fetch next only


select * from student  oreder by sno 
offset (頁數-1)*頁面大小+1  rows fetch next 頁面大小  rows only ;




(n-1)*10+1    ---  n*10 

mysql從0開始計數,Oracle/sqlserver 從1開始計數


1
2
3
4
6
8
9
10

11
12
...
20


21
22
..
31

分頁實現:
5個變量(屬性)			
1.數據總數	100	103					(查數據庫,select count(*)..)									
2.頁面大小(每頁顯示的數據條數)20				  (用戶自定義)
3.總頁數 							 (程序自動計算)
	總頁數 = 100/20  =數據總數/頁面大小
	總頁數 = 103/20 = 數據總數/頁面大小+1
	--->
	總頁數 = 數據總數%頁面大小==0? 數據總數/頁面大小:數據總數/頁面大小+1 ;

									
4.當前頁(頁碼)							  (用戶自定義)								
5.當前頁的對象集合(實體類集合):每頁所顯示的所有數據 (10個人信息)
List<Student>							   (查數據庫,分頁sql)	
		
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章