sql分页语句
来源:互联网 发布:快乐大本营知乎 编辑:程序博客网 时间:2024/06/17 14:02
取出表中第31-40条记录,主键是ID且自增:
1、在MySql中使用limit,如select * from tablename order by id limit 31,10;
2、Oracle中使用到rownum,如select * from (select rownum r,* from tablename where r<=40) where r>30;
下面介绍下rownum:
ROWNUM是一个虚假的列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简言之 rownum 是对符合条件结果的序列号,总是从1开始排起。所以选出的结果不可能没有1,而有其他大于1的值。一个ROWNUM值不是被永久的分配给一行 ,表中的某一行实际上也并没有标号;比如rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。或者理解为: ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
select rownum,* from tablename where rownum != 10;只能返回前9条数据,因为rownum 为9后,下一个记录的 rownum为10。条件是!=10,所以不会取出,之后的记录rownum又是10,同理不会取出。
rownum >1 时查不到记录,而 rownum >0 或 rownum >=1 却可以查询到记录。这是因为 rownum 是在查询到的结果集后加上去的,总是从1开始。同理使用between...and时,要从0开始。
如果想要用 rownum > 10 这样的条件,就要用嵌套语句,把 rownum 先生成,然后对它进行查询。如 select * from (select rownum r,* from tablename where ...) where r>num;对结果集的分页即如此。
ROWNUM值何时被分配呢?分配是在查询的谓词解析之后,任何排序和聚合之前进行的。ROWNUM值只有当被分配之后才会增长,因此下面的查询没有返回结果: select * from tablename where rownum>1; ROWNUM > 1对于第一行来说并不是真值,ROWNUM没有增长到 2。
rowid 与 rownum 都被称为伪列,但存在方式不一样。rowid 可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。rowid 相对于表来说又像表中的一般列,所以以 rowid 为条件就不会有 rownum那些情况发生。 另外注意:rownum不能以任何基表的名称作为前缀。
- 分页:用sql语句分页
- oracle分页sql语句
- ORACLE分页SQL语句
- 分页sql语句
- sql分页语句
- 经典分页sql语句
- SQL分页语句
- ORACLE 分页SQL语句
- SQL 分页语句
- sql语句 实现分页
- ORACLE分页SQL语句
- sql语句实现分页
- SQL分页语句
- 分页SQL语句
- SQL分页语句
- 分页SQL语句
- SQL数据库分页语句
- sqlserver2005 分页 SQL语句
- 练习9-子串-2重循环
- 不知原谅什么,诚觉世事尽可原谅
- JavaScript创建对象的几种模式
- SqlServe链接异常:A network-related or instance-specific error occurred ...
- 数据产品经理如何建设BI平台?
- sql分页语句
- Java实现单链表部分翻转
- AndroidStudio常用快捷键搜集整理
- 关于valuestack
- LeetCode 139. Word Break (Medium)
- 关于左侧菜单栏,点击二级菜单栏展开
- poj1321 DFS
- 【JZOJ 5358】【NOIP2017提高A组模拟9.12】BBQ
- 防火墙搭建及NET机制