"COLOR: #008080">
SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists
(Select * From (Select Top m-1 * From TABLE order by id) b Where b.id=
OR: #0000ff">Order By Id Asc) Temp)
直接取得數據庫中的分頁記錄
前提是表中必須有主鍵
取得第M條記錄之後的N條記錄:
SELECT TOP N *
FROM [TABLE]
WHERE (ID NOT IN
(SELECT TOP M id
FROM [TABLE]
ORDER BY [ORDER]))
ORDER BY [ORDER]
Oracle中的實現,取得第M到N條記錄: SELECT * FROM
(
SELECT * , ROWNUM AS CON FROM
(
SELECT * FROM [TABLE] ORDER BY [ORDER]
)
WHERE ROWNUM <= N
)
WHERE CON >= M;
查詢表中連續的某幾條記錄
不要傳任何列的條件參數,查詢表中連續的某幾條記錄
如:表A,id列為主鍵
id name sex age
-------------------------
1 luoyi male 21
2 yaya female 20
3 lili female 22
4 wuyong male 25
.......................
這個表的記錄還有很多,如果我想取第二、第三條記錄,不為別的,我就想要這兩條,這不僅在編程中會用到,而且在一些公司面試時也有類似考題(呵呵,我沒有遇到過),在Oracle和mssqlserver中SQL代碼分別為:
一、Oracle
在Oracle中不能用top關鍵字,而用rownum,有兩種方法可以實現
1.(select * from A where rownum <= 4) minus (select * from A where rownum <= 1)
這樣就得到了二、三兩條記錄了。minus 關鍵字的意思是求兩個結果集的差集,在數學中有這個概念,比如說兩個集合可以合並、公有、差集.
2. select * from (select * from A where rownum < 4) b where b.id not in(select id from A where rownum <2) 這句代碼也可以實。主要運用了not in運算符
二、ms SQL Server
在server中沒有minus,只能用類似於Oracle的第二種方法
select * from (select top 3 * from A) as b where b.id not in(select top 1 id from A)
三、繪制出來的結果為:
id name sex age
--------------------------------
2 yaya female 20
3 lili female 22
特點:一次查詢,數據庫只返回一頁的數據。而不是取出所有的數據。
說明:
pagesize: 每頁顯示記錄數
cureentpage:當前頁數