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的游標存儲進程分頁) 效力最差,然則最為通用
在現實情形中,要詳細剖析。