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
)
where con >= 2;
ID
----------
2
3
SqlServer分頁:
一條SQL語句搞定Sql Server 2000 分頁
Sql Server 2000 的分頁方案大多采用存儲過程來完成,存儲過程書寫比較複雜,在參考了 ITPUB 網站上衆多網友的意見後用一條 SQL 語句就可以實作分頁功能。 SELECT TOP 頁大小 * FROM Users WHERE (ID NOT IN (SELECT TOP ( 頁大小 *( 頁數 -1)) ID FROM Users ORDER BY ID DESC)) ORDER BY ID DESC 注:頁大小指的是每頁顯示的條數。黃底部分是需要用程式運算後的一個數字。
千萬級資料分頁的存儲過程:
引用自:http://blog.csdn.net/leizhipan/archive/2006/10/01/1313507.aspx
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