簡單歸納一下Oracle,MySql,SQL Sqlserver這三個數據庫的分頁查詢語句。數據庫
例:每頁顯示兩條數據,如今要查詢第二頁,也就是第3-4條數據。session
查詢語句:spa
1 select * from ( 2 select dept.*,rownum num from dept where rownum <= 4 3 ) d where d.num >= 3
解釋:使用rownum列進行分頁,子查詢中設置查詢結束行,父查詢中設置查詢起始行。hibernate
注意:子查詢中的rownum列要起一個別名。code
例:每頁顯示10條數據,如今要查詢第三頁,也就是第21-30條數據。server
查詢語句:對象
1 SELECT * FROM `tab_sys_menu` LIMIT 20, 10
解釋:使用limit進行分頁查詢,limit以後的第一個參數是設置查詢起始行,第二個參數是設置查詢行數(也就是每頁顯示數量)。blog
注意:起始行從0開始。get
例:每頁顯示10條數據,如今要查詢第三頁,也就是第21-30條數據。it
查詢語句:
1 select top 10 * from Room where RoomId not in ( 2 select top 20 RoomId from Room 3 )
解釋:使用子查詢進行分頁,子查詢裏面的top值設置爲要排除的行,好比要從第21條數據開始查詢,那麼前20條數據確定是不要的,再好比要從第41條數據開始查詢,那麼前40條數據確定是不要的。
父查詢的top值設置爲查詢行數(也就是每頁顯示數量)。
其實分頁查詢語句也不必定非得本身寫,若是項目dao層用hibernate實現的話,有兩種方式能夠很是方便的實現分頁查詢。
它們分別是Criteria查詢和HQL查詢。
Criteria查詢:建立Criteria對象以後,有兩個方法,分別是:setMaxResults(設置每頁顯示記錄數)和setFirstResult(設置從第幾行開始查詢)。
HQL查詢:其實和上面的同樣,根據Session建立Query以後,query對象也有setMaxResults(設置每頁顯示記錄數)和setFirstResult(設置從第幾行開始查詢)方法。
例:session.createQuery(hql).setFirstResult((result.getPageNo()-1)*result.getPageSize()).setMaxResults(size).list();