小白學習記錄之sql分頁實現

2021-10-04 13:36:09 字數 2887 閱讀 9919

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