select * from a_matrix_navigation_map where rowid not in(select rowid from a_matrix_navigation_map where rownum<=0) and rownum<=10第二種: SELECT * FROM ( SELECT A.*, rownum r FROM ( SELECT * FROM a_matrix_navigation_map ) A WHERE rownum <= 10 ) B WHERE r > 0 第三種 SELECT * FROM table WHERE ROWNUM<101; minus SELECT * FROM table WHERE ROWNUM<91; 第四種 可以用變通一點的辦法,我給個示例: sql = "select a_id,a_title,a_author,aID,a_time,a_readtime,sID from article order by a_id"; int a; while (rs.next()) { a++; if (a=ipage+spage)continue; ... }
其中第二種是非常成熟的分頁
我的實例~ 即可實現 類似limit 功能$bandanspager="select * from abc t2,abc1 t1 where t1.id=t2.id group by t1.id";
$sql=" SELECT * FROM
(
SELECT A.*, rownum r
FROM
( ".$bandanspager.") A
WHERE rownum <= 10
) B WHERE r > 0 Oracle不支持類似于 MySQL 中的 limit. 但你還是可以rownum來限制返回的結果集的行數. 如果你只希望返回前十行紀錄,你可以這樣寫: SELECT * FROM table WHERE ROWNUM<10; 但是下面的語句是不對的: SELECT * FROM table WHERE ROWNUM>90 AND ROWNUM<100; 這是因為 Oracle 認為這個條件不成立,所以沒有返回。 你應該這樣寫: SELECT * FROM table WHERE ROWNUM<101; minus SELECT * FROM table WHERE ROWNUM<91; 其他數據庫模擬實現mysql的limit語法 假如我有個user表,我想查詢符合某些條件的第50個用戶開始的10個用戶,且不能使用id號between and那樣查詢,應該怎么寫SQL語句? 在mysql數據庫中有limit,offset語句可以方便的實現,那么在SQL server中呢?SQL Server是否支持limit和offset語句呢? select top 10 * from (select top 60 * from [user] order by userid) aa order by userid desc oracle,如果想從表中取出按照某字段排序前M到N條記錄 下面的ORACLE語句是最好的: SQL> select ID from ( select ID , rownum as con from ( select ID from TestSort order by ID ) where rownum <= 3 /*N值*/ ) where con >= 2; /*M 值*/ ID ---------- 2 3
SqlServer分頁: 一條SQL語句搞定Sql Server 2000 分頁 Sql Server 2000 的分頁方案大多采用存儲過程來完成,存儲過程書寫比較復雜,在參考了ITPUB網站上眾多網友的意見后用一條SQL語句就可以實現分頁功能。SELECT TOP 頁大小 *FROMUsersWHERE(ID NOT IN (SELECT TOP (頁大小*(頁數-1)) ID FROM Users ORDER BY ID DESC))ORDER BYID DESC注:頁大小指的是每頁顯示的條數。黃底部分是需要用程序運算后的一個數字。千萬級數據分頁的存儲過程: 引用自:Oracle分頁(limit方式的運用)+付上SqlServer分頁+千萬級數據分頁的存儲過程 /* 經測試,在 14483461 條記錄中查詢第 100000 頁,每頁 10 條記錄按升序和降序第一次時間均為 0.47 秒,第二次時間均為 0.43 秒,測試語法如下: exec GetRecordFromPage news,newsid,10,100000 news 為 表名, newsid 為關鍵字段, 使用時請先對 newsid 建立索引。 */ /* 函數名稱: GetRecordFromPage 函數功能: 獲取指定頁的數據 參數說明: @tblName 包含數據的表名 @fldName 關鍵字段名 @PageSize 每頁記錄數 @PageIndex 要獲取的頁碼 @OrderType 排序類型, 0 - 升序, 1 - 降序 @strWhere 查詢條件 (注意: 不要加 where)
*/ CREATE PROCEDURE GetRecordFromPage @tblName varchar(255), -- 表名 @fldName varchar(255), -- 字段名 @PageSize int = 10, -- 頁尺寸 @PageIndex int = 1, -- 頁碼 @OrderType bit = 0, -- 設置排序類型, 非 0 值則降序 @strWhere varchar(2000) = '' -- 查詢條件 (注意: 不要加 where) AS
declare @strSQL varchar(6000) -- 主語句 declare @strTmp varchar(1000) -- 臨時變量 declare @strOrder varchar(500) -- 排序類型 if @OrderType != 0 begin set @strTmp = '<(select min' set @strOrder = ' order by [' + @fldName + '] desc' end else begin set @strTmp = '>(select max' set @strOrder = ' order by [' + @fldName +'] asc' end set @strSQL = 'select top ' + str(@PageSize) + ' * from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' + @strOrder if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) + ' * from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder if @PageIndex = 1 begin set @strTmp = '' if @strWhere != '' set @strTmp = ' where (' + @strWhere + ')' set @strSQL = 'select top ' + str(@PageSize) + ' * from [' + @tblName + ']' + @strTmp + ' ' + @strOrder end exec (@strSQL) GO |