国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql、oracle 分頁查詢

2024-07-24 13:00:02
字體:
供稿:網(wǎng)友

在web開發(fā)中,若我們從數(shù)據(jù)庫中拿到的數(shù)據(jù)過多,則我們常常會(huì)想到分頁。 分頁不但可以保持展示數(shù)據(jù)的頁面的整潔性和可控性,也同樣降低了數(shù)據(jù)庫的I/O壓力(需要時(shí)才查詢),可謂是一舉兩得。下面我們來談?wù)劊琈ySQL和Oracle數(shù)據(jù)庫如何進(jìn)行分頁。


——————Mysql分頁—————— 一般對(duì)MySQL數(shù)據(jù)庫分頁,我們都會(huì)使用到其自帶的limit函數(shù)。 Limit函數(shù)語法格式:

SELECT [DISTIN|UNIQUE](*,columname[AS alias],…)FROM tableWHERE …ORDER BY …LIMIT offset,rows

offset:指定要返回的第一行的偏移量(就是指定從第幾條數(shù)據(jù)開始查),選項(xiàng)可選,默認(rèn)的偏移量是0(第一條數(shù)據(jù)) rows:指定返回?cái)?shù)據(jù)的行數(shù),必須填寫

假如我有這樣一張表: 1

當(dāng)我執(zhí)行: select t.* from chat_user t limit 5; 則會(huì)出現(xiàn)以下結(jié)果(從第一條數(shù)據(jù)開始,獲取5條記錄): 2

select t.* from chat_user t limit 3,5; 從第3條數(shù)據(jù)(不包含第3條)開始,取5條記錄 3

select t.* from chat_user t limit 5,5; 從第5條數(shù)據(jù)(不包含第5條)開始,取5條記錄 4

由上面執(zhí)行的結(jié)果來看,對(duì)于offset和rows兩個(gè)參數(shù)的定義,大家應(yīng)該也已經(jīng)了解了,但是在真正的應(yīng)用開發(fā)中,我們肯定不能這樣寫的。舉個(gè)例子吧,我要每次查找5行記錄,那么,第一頁就是1-5,第二頁就是6-10,以此類推。你總不能每次都將offset都傳進(jìn)去吧? 所以,前人總結(jié)了一條公式,以便應(yīng)用在開發(fā)中,公式為offset=(page-1)*rows,這個(gè)page就是分頁的頁數(shù),比如第一頁,代入公式那就是從offset就是0,從第一條數(shù)據(jù)開始取。第二頁,代入公式那就是rows,從第rows條數(shù)據(jù)開始取。這就剛好對(duì)應(yīng)了我上面所說的1-5,6-10這些記錄。

獲取總頁數(shù): 實(shí)現(xiàn)分頁的程序中,需要獲取分頁后的總頁數(shù),原本總頁數(shù)可以根據(jù)“總記錄數(shù)/每頁顯示的記錄數(shù)”來計(jì)算,但是,這樣難免會(huì)有余數(shù)出現(xiàn),所以為了解決出現(xiàn)余數(shù)仍能正確獲得頁數(shù),我們也得出了一個(gè)公式:總頁數(shù)=(總記錄數(shù)-1)/每頁顯示的記錄數(shù)+1。 比如我上面的截圖中總記錄數(shù)為12,我每頁要顯示5條記錄,那么帶入里面,總頁數(shù)就是3,這是正確的。


——————ORACLE分頁——————

對(duì)于oracle的分頁,并沒有像mysql那樣,有一個(gè)limit函數(shù)專門供給分頁查詢。其實(shí)說白了,oracle的分頁查詢,就是給要查詢的表中定義一個(gè)ROWNUM,然后對(duì)他進(jìn)行范圍限定,起到分頁查詢的效果。 假如我有下面這一張表: 5

那么我要查詢,行號(hào)在5-10之間的記錄,所以,我可以像這樣寫: 6

那我要查詢?nèi)掌谛∮诘扔?017.03.01并且行號(hào)在1-10之間的記錄,我可以這樣寫: 7

有 order by 條件限制的時(shí)候,你可以這樣寫 8


——————Hibernate的HQL分頁—————— hibernate對(duì)于mysql還是oracle,都封裝好了分頁的寫法,我們只需要對(duì)setFirstResult和setMaxResult進(jìn)行設(shè)定查詢,具體代碼如下:

org.hibernate.Query q = “form User”;q.setFirstResult(int offset);q.setMaxResult(int rows);

hibernate對(duì)mysql以及oracle封裝的底層代碼,有興趣的同學(xué)可以點(diǎn)擊下面博文地址進(jìn)去學(xué)習(xí),做一件事要刨根問底才能銘記于心。

博文鏈接: http://blog.csdn.net/davidmr_001/article/details/1587593

好啦!今天的博文就寫到這,學(xué)無止境,生生不息。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 溆浦县| 三穗县| 城固县| 青河县| 叶城县| 博白县| 台东市| 大方县| 灌南县| 图木舒克市| 宣城市| 高碑店市| 岑巩县| 社旗县| 中宁县| 安平县| 中超| 扶余县| 东台市| 桐庐县| 临清市| 即墨市| 天长市| 苏尼特左旗| 甘泉县| 田阳县| 淮北市| 忻州市| 若尔盖县| 邛崃市| 中牟县| 桃园市| 厦门市| 连平县| 车险| 新邵县| 高邮市| 盐亭县| 荃湾区| 北安市| 都江堰市|