zoukankan      html  css  js  c++  java
  • ORACLE中查询第n条到第m条的数据记录的方法

    一、经过测试,下面的方法通过:

    SELECT * FROM
                 (
                     SELECT 表名.*, ROWNUM AS CON FROM 表名 WHERE ROWNUM <= M AND 其它查询条件 ORDER BY 排序条件 
                 )
    WHERE CON >=N;

    二、参考其它网上的方法

    SQL/Oracle取出第 m 条到第 n 条记录的方法

    用一句SQL取出第 m 条到第 n 条记录的方法

    用一句SQL取出第 m 条到第 n 条记录的方法

    从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

    #1楼 [楼主] 2007-03-02 10:38 Athrun

    直接取得数据库中的分页记录

    前提是表中必须有主键

    取得第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

    回复 引用 查看

    查询数据库中的N条记录,然后,对这N条记录排序

    看到这个主题,有些人,都会写出这个一句来,

    select top 10 * from tablename order by createtime

    这条语句的意思正好和主题相反

    正确答案1:

    select top 10 * from TableName where id in(select top 10 id from TableName order by id) order by createtime

    这条语句,就可以找出表中的前10条的记录,然后以createtime时间排序

    要求是表中需要有一个主键

    答案2

    没有主键也可以

    SELECT *

    FROM (SELECT TOP 10 *

    FROM titles) mm

    ORDER BY pubdate DESC

    回复 引用 查看

    随机取出若干条记录的SQL语句

    Sql server:

    select top 20 * from 表 order by newid()

    Access:

    SELECT top 20 * FROM 表 ORDER BY Rnd(id)

    Rnd(id) 其中的id是自动编号字段,可以利用其他任何数值来完成

    比如用姓名字段(UserName)

    SELECT top 20 * FROM 表 ORDER BY Rnd(len(UserName))

    MySql:

    Select * From 表 Order By rand() Limit 20

    回复 引用 查看

    作者:yanek

    email:yanek@126.com

    特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。

    说明:

    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之间
  • 相关阅读:
    Java EE 中由于版本所引发的问题
    XP系统启动电脑时进入读条时读一会就卡住不动,但用安全模式可以进入
    JVM terminated. Exit code=1
    MyEclipse中打war包,打jar包并在项目中导入jar包
    Error:could not open'C:\Porogram Files\Java\jrelib\j386\jvm.cfg'
    几种标签库中的一些特有使用
    Oracle基本语法
    Java生成Excel
    Java ME开发环境的配置
    Android webkit log定义
  • 原文地址:https://www.cnblogs.com/lidabo/p/2854179.html
Copyright © 2011-2022 走看看