在學習mysql時,我們對於查詢結果顯示可以使用limit來達到顯示前幾條資料或者分頁的效果,例如查詢員工表中編號前10的員工為
select * from emp e order by e.id limit 0,10;
(注意0是開始index,10代表顯示10條)
所以在實際應用中應該是這樣用的:
select * from table limit (pageno-1)*pagesize, pagesize;
(pageno為頁碼,pagesize是顯示的條數)
在這裡說了這麼多,接下來就是oracle資料庫中關於分頁查詢的知識點,首先,在oracle中是沒有用limit來達到該效果的可能,要想達到分頁的效果,首先需要知道rownum的使用,這裡就依次為大家介紹rownum的作用。第一種為非排序
top-n(就是用rownum時沒有order); 第二種為排序
top-n(就是rownum和order by 一起使用);最後也就是常用的oracle分頁查詢了。
rownum是虛列,值從1開始,不能用表名修飾(例如a.rownum是錯的)
查詢員工表中的前10條資料:
select
dept.department_id,
rownum
from
departments dept
where
rownum
<=10
由於rownum從1開始,所以是<=10
但類似的最後rownum判斷是》10為什麼查不到資料呢?
select dept.department_id, rownum
from departments dept
where rownum >10
我這裡的理解是這樣的:查不到資料,在第一條資料查出來之後,給賦值為rownum為1,但是rownum的約束條件為》10,所以該條資料不滿足要求,從下一條資料開始rownum為0,這樣一直下去,所以一直查不到資料
同樣的rownum !=10顯示的是前九條資料,而不是不等於10的資料,在rownum為10的時候,該條資料不符合要求,但下一條的rownum還是10,所以一直沒有資料。
select dept.department_id, rownum
from departments dept
where rownum !=10
對於如何查詢後面多少條的資料,就是接下來top-n查詢要實現的功能了
例如此處要查詢職業為』it_prog』的員工中工資最低的三位,這裡肯定就要使用到order by了,但是在使用order by和rownum的時候可能出現一些問題。
--錯誤寫法
select e.employee_id, e.salary
from employees e
where job_id ='it_prog' and rownum <= 3
order by salary asc --
正確寫法
select rownum,m.r,m.employee_id, m.salary
from (select e.*,rownum r
from employees e
where job_id ='it_prog'
order by salary asc) m
where rownum <= 3
根據以上**可以知道,由於order by一直在where條件之後執行,但是rownum又是在where中執行的,所以按照需求,rownum的判斷應該在order by之後
--查詢員工工資
(降序排序
)在第五頁的,每頁
4條內容
select*
from
(select
a.*,
rownumr
from
(select*
from
employees e
order
bysalary) a)
where
r between
17and20
類似於上面的top-n查詢,就是內層排序,外層設定範圍(可能中間還會有一層來選出rownum的值用來最後設定範圍)
如何進行模糊分頁
使用模糊分頁需要3個引數 關鍵字 key,當前頁 page,查詢內容個數 count 核心 所有選單列表 分頁 查詢所有菜品並分頁 listlist menuservice.foodlist key,pageutils.getcurrpage 1 6,6 request.setattribute p...
如何進行簡潔的分頁查詢 PageHelper
前幾天整理 的時候,發現了同事寫的分頁方法,感覺很有意思,在這裡記錄下來。首先是在pom.xml中引入該jar包 com.github.pagehelper pagehelper spring boot starter 1.1.3 接著在配置檔案中寫入配置 這是在yml檔案中的配置 pagehelp...
百萬條資料如何進行分頁查詢
今天面試被問到一張表 有500w條資料,如何進行分頁查詢,瞬間不知道怎麼回答,平時工作中沒接觸到這麼大的資料量。所以回家自己去實驗一下 建立一張user表 create table user id bigint 20 not null auto increment,username varchar ...