簡單總結下Oracle/MySql/SQL Sqlserver這三個資料庫的分頁查詢語句 ...
簡述
簡單概括一下Oracle,MySql,SQL Sqlserver這三個資料庫的分頁查詢語句。
Oracle分頁查詢
例:每頁顯示兩條數據,現在要查詢第二頁,也就是第3-4條數據。
查詢語句:
1 select * from ( 2 select dept.*,rownum num from dept where rownum <= 4 3 ) d where d.num >= 3
解釋:使用rownum列進行分頁,子查詢中設置查詢結束行,父查詢中設置查詢起始行。
註意:子查詢中的rownum列要起一個別名。
MySQL分頁查詢
例:每頁顯示10條數據,現在要查詢第三頁,也就是第21-30條數據。
查詢語句:
1 SELECT * FROM `tab_sys_menu` LIMIT 20, 10
解釋:使用limit進行分頁查詢,limit之後的第一個參數是設置查詢起始行,第二個參數是設置查詢行數(也就是每頁顯示數量)。
註意:起始行從0開始。
SQL Server分頁查詢
例:每頁顯示10條數據,現在要查詢第三頁,也就是第21-30條數據。
查詢語句:
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();