程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> oracle,mysql,SqlServer三種數據庫的分頁查詢的實例

oracle,mysql,SqlServer三種數據庫的分頁查詢的實例

編輯:MSSQL

oracle,mysql,SqlServer三種數據庫的分頁查詢的實例。本站提示廣大學習愛好者:(oracle,mysql,SqlServer三種數據庫的分頁查詢的實例)文章只能為提供參考,不一定能成為您想要的結果。以下是oracle,mysql,SqlServer三種數據庫的分頁查詢的實例正文


MySql:

MySQL數據庫完成分頁比擬簡略,供給了 LIMIT函數。普通只須要直接寫到sql語句前面就好了。
LIMIT子 句可以用來限制由SELECT語句前往過去的數據數目,它有一個或兩個參數,假如給出兩個參數, 第一個參數指定前往的第一行在一切數據中的地位,從0開端(留意不是1),第二個參數指定最多前往行數。例如:
select * from table WHERE … LIMIT 10; #前往前10行
select * from table WHERE … LIMIT 0,10; #前往前10行
select * from table WHERE … LIMIT 10,20; #前往第10-20行數據

 

Oracle:

斟酌mySql中的完成分頁,select * from 表名  limit 開端記載數,顯示若干條;便可以完成我們的分頁後果。

然則在oracle中沒有limit症結字,然則有 rownum字段

rownum是一個偽列,是oracle體系主動為查詢前往成果的每行分派的編號,第一行動1,第二行動2,以此類推。。。。

第一種:


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 e.*,rownum  r from  (select * from emp order by sal desc) e ) e1 where e1.r>21 and e1.r<=40;


白色部門:依照工資降序排序並查詢一切的信息。

棕色部門:獲得白色部分查詢的值,並查詢出體系的rownum並指定上別號。這一句就比擬症結,起了一個過渡的感化,起首要算出rownum來對白色部門指定上序號,也能夠為藍色裡面部門用到這個變量。指定上查詢的開端記載數和停止記載的前提。

藍色部門:指定記載從第幾條開端到第幾條停止,掏出棕色部分的值來作為查詢前提的變量

總結:絕年夜多半的情形下,第一個查詢的效力比第二個高很多。

SqlServer:

分頁計劃一:(應用Not In和SELECT TOP分頁)

語句情勢:


SELECT TOP 10 *

FROM TestTable

WHERE (ID NOT IN

(SELECT TOP 20 id

FROM TestTable

ORDER BY id))

ORDER BY ID

 

SELECT TOP 頁年夜小 *

FROM TestTable

WHERE (ID NOT IN

(SELECT TOP 頁年夜小*頁數 id

FROM 表

ORDER BY id))

ORDER BY ID


分頁計劃二:(應用ID年夜於若干和SELECT TOP分頁)

語句情勢:


SELECT TOP 10 *

FROM TestTable

WHERE (ID >

(SELECT MAX(id)

FROM (SELECT TOP 20 id

FROM TestTable

ORDER BY id) AS T))

ORDER BY ID

 

SELECT TOP 頁年夜小 *

FROM TestTable

WHERE (ID >

(SELECT MAX(id)

FROM (SELECT TOP 頁年夜小*頁數 id

FROM 表

ORDER BY id) AS T))

ORDER BY ID


分頁計劃三:(應用SQL的游標存儲進程分頁)


create procedure XiaoZhengGe

@sqlstr nvarchar(4000), --查詢字符串

@currentpage int, --第N頁

@pagesize int --每頁行數

as

set nocount on

declare @P1 int, --P1是游標的id

@rowcount int

exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output

select ceiling(1.0*@rowcount/@pagesize) as 總頁數--,@rowcount as 總行數,@currentpage as 以後頁

set @currentpage=(@currentpage-1)*@pagesize+1

exec sp_cursorfetch @P1,16,@currentpage,@pagesize

exec sp_cursorclose @P1

set nocount off


其它的計劃:假如沒有主鍵,可以用暫時表,也能夠用計劃三做,然則效力會低。

建議優化的時刻,加上主鍵和索引,查詢效力會進步。

經由過程SQL 查詢剖析器,顯示比擬:結論是:

分頁計劃二:(應用ID年夜於若干和SELECT TOP分頁)效力最高,須要拼接SQL語句

分頁計劃一:(應用Not In和SELECT TOP分頁) 效力次之,須要拼接SQL語句

分頁計劃三:(應用SQL的游標存儲進程分頁) 效力最差,然則最為通用

在現實情形中,要詳細剖析。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved