用一句SQL取出第 m 条到第 n 条记录的方法
来源:互联网 发布:张悦然 知乎 编辑:程序博客网 时间:2024/06/05 02:38
从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)
SELECT TOP n-m+1 *
FROM Table
WHERE (id NOT IN (SELECT TOP m-1 id FROM Table ))
--从TABLE表中取出第m到n条记录 (Exists版本)
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=a.id )
Order by id
--m为上标,n为下标,例如取出第8到12条记录,m=8,n=12,Table为表名
Select Top n-m+1 * From Table
Where Id>(Select Max(Id) From
(Select Top m-1 Id From Table Order By Id Asc) Temp)
Order By Id Asc
直接取得数据库中的分页记录
前提是表中必须有主键
取得第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:当前页数
select * from ( select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC
例子说明:
假如数据库表如下:
user_table:
id:主键,自增
username:字符
password:字符
假设有80条记录,每页显示10条记录,id 从1到80
现在按照id升序排列取出第三页的数据应该为:所取得记录的id 应该为 21到30。
这时该语句应该为:
select * from ( select TOP 10 * FROM ( SELECT TOP 30 * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC
原理如下:
先按照id从小到大升序取出30条记录(3*10),也就是:id 在 1-30 之间的记录 (SELECT TOP 30 * from user_table ORDER BY id ASC)
然后按照ID降序排列这30条记录,得到记录为id 在:从30到 1
然后在这些30条记录中取出前10条记录:取得的记录为:id 在30-21之间。这就是我们需要的数据,但这时是按照降序排列的,不符合要求。
最后在重新排序得到最终我们需要的数据。id在21-30之间。
- SQL取出第 m 条到第 n 条记录的方法
- SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法-更新
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 用一句SQL取出第 m 条到第 n 条记录
- SQL/Oracle取出第 m 条到第 n 条记录的方法
- SQL/Oracle取出第 m 条到第 n 条记录的方法
- webpart
- 关于C#中的Timer
- datalist中LinkButton中传多个参数的例子
- 常用到的Eclipse快捷键
- i++与++i区别
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 随机取出若干条记录的SQL语句
- 忘记设置sys和system密码
- Ajax
- 借鉴无极限
- Linux解释器原理详细介绍
- 借鉴无极限2
- Servlet之旅-ServletConfig与ServletContext的区别
- Servlet之旅-Servlet中的Attribute