如何用sql語句 實現分頁查詢
方法1:
適用于 SQL Server 2000/2005
SELECT TOP 頁大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 頁大小*(頁數-1) id FROM table1 ORDER BY id
)
ORDER BY id
方法2:
適用于 SQL Server 2000/2005
SELECT TOP 頁大小 *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP 頁大小*(頁數-1) id FROM table1 ORDER BY id
) A
)
ORDER BY id
方法3:
適用于 SQL Server 2005
SELECT TOP 頁大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber >頁大小*(頁數-1)
不用sql語句怎么進行分頁
可以過濾啊。
你的希望應該是:有一個5000條記錄的集合,希望能從指定位置開始獲取指定數量的一個連續的子集吧?
如果你用LinQ可以使用下面的代碼
public IEnumable GetData(IEnumable source, int startIndex, int size)
{
return *(startIndex).Take(size);
}
如果你用的不是LinQ,那么:
public IEnumable GetData(IEnumable source, int startIndex, int size)
{
int index = 0;
foreach(var item in source)
{
if(index {
continue;
}
if(index - startIndex >size)
{
break;
}
yield return item;
}
當然,上面的枚舉方法不是很好,不過,一般的情況下,你的集合應該能確定類型,比如是LIST或ARRAY等,也就是說能進行下標索引的,此時就更簡單了,下面的代碼就用數組來實現:
public IEnumable GetData(object[] source, int startIndex, int size)
{
for(int i = startIndex; i {
yield return source[i];
}
}
如何實現分頁,sql語句如何實現
在絕大多數的應用中,返回大量的符合條件的記錄是司空見慣的,最典型的莫過于搜索了。在搜索的應用中,用戶給出搜索條件,服務器查出符合條件的記錄。但往往搜索會返回大量的數據記錄,如果在網頁中,往往是通過分頁的方式來實現,頁面提供諸如上一頁,下一頁等等按鈕來實現分頁。
現在主要有以下幾中方式來實現分頁:
*的Find方法
2.在顯示第一頁前將所有的記錄放在collection對象中,后續的各頁都在內存中取。
3.每一頁都到數據庫作一次重復的查詢,然后將符合條件的記錄顯示出來。
4.保存前幾頁的搜索結果在內存中(經常使用到的),后續的記錄(這些數據是多數用戶都沒有耐心看的)再通過連數據庫取得。
5.其他各種cache機制。
我們可以根據實際情況來選擇適合自己的方法,我給大家介紹一個通過標準的SQL語句來得到符合條件的數據。如從第10到20條的符合條件(where語句中的)的記錄。通過這種方法取得記錄有一個必要條件,必須有一個能夠標識記錄順序的字段,如id,time等等。下面我為大家演示一個例子:
查詢t_table表中所有記錄第10到20條,按id排序。
SQL語句為:
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE * < * ) > = 10 AND (SELECT count(*) FROM t_table t2 WHERE * < * ) < 20
又如查詢t_table表中key='123'第10到20條的記錄,按id排序。
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE * < * AND * = '123') > = 10 AND (SELECT count(*) FROM t_table t2 WHERE * < * AND * = '123') < 20 AND * = '123'
當然條件中的id可以換為任何能表識記錄順序的字段。
HQL語句分頁
hql語句分頁是在數據層取出數據時只取出指定的數量(1頁大小的數量)的數據,從而實現真正的分頁,減少網絡的傳輸,具體的數據層的代碼如下: /** * 使用hql 語句進行分頁查詢操作 * @param hql 需要查詢的hql語句 * @param offset 第一條記錄索引 * @param pageSize 每頁需要顯示的記錄數 * @return 當前頁的所有記錄 */ @SuppressWarnings("unchecked") public List findByPage(final String hql, final int offset, final int pageSize) { List list = getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { List result = *Query(hql) .setFirstResult(offset) .setMaxResults(pageSize) .list(); return result; } }); return list; }/** * 使用hql 語句進行分頁查詢操作 * @param hql 需要查詢的hql語句 * @param value 如果hql有一個參數需要傳入,value就是傳入的參數 * @param offset 第一條記錄索引 * @param pageSize 每頁需要顯示的記錄數 * @return 當前頁的所有記錄 */ @SuppressWarnings("unchecked") public List findByPage(final String hql , final Object value , final int offset, final int pageSize) { List list = getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { List result = *Query(hql) .setParameter(0, value) .setFirstResult(offset) .setMaxResults(pageSize) .list(); return result; } }); return list; }/** * 使用hql 語句進行分頁查詢操作 * @param hql 需要查詢的hql語句 * @param values 如果hql有多個個參數需要傳入,values就是傳入的參數數組 * @param offset 第一條記錄索引 * @param pageSize 每頁需要顯示的記錄數 * @return 當前頁的所有記錄 */ @SuppressWarnings("unchecked") public List findByPage(final String hql, final Object[] values, final int offset, final int pageSize) { List list = getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = *Query(hql); for (int i = 0 ; i < * ; i++) { *ameter( i, values[i]); } List result = *stResult(offset) .setMaxResults(pageSize) .list(); return result; } }); return list; } } 在jsp中取得的list就是分頁后的數據了,直接將它們遍歷顯示出來就可以了。
求SQL分頁的語句
2個參數Start end
start 開始 end 結束
例如第二頁從Start11條開始 結束end 21百
select * from (select rownum a,NEWS.* from NEWS where rownum<='"+end+"') b where b.a>'"+start+"'"
方法2 select * from NEWS limit a,b
a就是從第幾條開始 b就是查詢出的條數
例如 從第10條開始后的10條select * from NEWS limit 10,10
從第6條開始后的8條select * from NEWS limit 6,8
oracle分頁 語句
對的,你說的對,但是rowCount 不行吧,我一直用rownum,是了一下rowCount也不行,但是建議你這樣寫:
select /*+first_rows(10)*/ b.* from
(select /*+first_rows(10)*/ a.*,rownum rnum from
(select /*+first_rows(10)*/ * from student ) a where rownum<= "+currentPage*pageSize+"
)b
where rnum>= (currentPage-1)*pageSize;
這個意思就是認為的在sql中添加hint 數據庫返回指定條目的數據是最快的。
如何使用sql語句進行分頁操作
利用SQL語句分頁要看你用的什么數據庫。
Oracle數據庫可以使用ROWNUM或row_number(),例如:Select * from (select ROWNUM rn, t.* from table t) where rn between 11 and 20;
Select * from (select row_number() over (ORDER BY col1) rn, t.* from table t) where rn between 11 and 20;
SQLServer數據庫可以用Top或者row_number()函數,道理同上。
利用SQL分頁有局限性,就是針對不同的數據庫有不同的寫法,所以通常會在應用程序里面做分頁通用性比較強。但是對于數據量非常龐大的應用來說,還是用SQL分頁比較適合。