ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql-分页

2022-06-21 23:00:56  阅读:142  来源: 互联网

标签:分页 sal -- select sql rownum SELECT


分页

oracle中使用伪列实现分页

a. 伪列

select rownum ,rowid, e.ename from emp e;
image

-- 报错 伪列不属于某一张具体的表
select e.rownum,e.rowid, e.ename from emp e;

image

b. 使用伪列实现分页

显示工资最高的前三条

select rownum, e.ename,e.sal from emp e where rownum <=3 ORDER BY sal;

这个sql错误
rownum 按初始顺序生成,一旦生成不可改变。
-- 这条先生成伪列,后排序

image

可以使用子查询实现

-- 先排序 后生成伪列   使用子查询
select rownum, e.ename,e.sal from (select * from emp order by sal desc) e where rownum <=3;

image

显示工资最高的第7-9条数据

select rownum,e.ename,e.sal from(select * from emp order by sal desc) e where rownum >= 7 and rownum <= 9;

image

原因:rownum只能使用< 、<=; 不能使用>、 >=
解决-->子查询

select * from (select rownum r, e.ename,e.sal from (select * from emp order by sal desc) e where rownum <=9) b where r >= 7;

注意 :

  1. where r >= 7; 这里判断的是虚表b 的列 rownum,不能写为 rownum >= 7,同时不能直接写为 b.rownum >= 7
  2. rownum <=9 不能写为 r <=9 :表的别名可以被自身表的列使用,但列的别名不能被自身表使用

分页SQL-oracle

假设每页显示10条数据,查询第n页的SQL语句是?

公式:
开始的索引 = (当前的页码 - 1) * 每页显示的条数 + 1
结束索引 = (当前的页码 * 每页显示的条数)

select * from (select rownum r, e.ename,e.sal from (select * from emp order by sal desc) e where rownum <= n*10 ) b where r >= (n-1)*10+1;

这里的10 就是 pageSize 页面大小;变量 n 就是 currentPage 当前页码

这个sql也可以改成 从数据库表中的第M条记录开始取N条记录形式,方便可其他数据库 参数 保持统一。

当然 实际写页面过程中 分页 需要五个变量来实现,其他一些参数都可以通过这五个变量来计算出来

1.数据总数
    查数据select count(*)

2.页面大小(每页显示的数据条数) 30
    用户自定页

3.总页数
    程序自动计算
    总页数=(数据条数%页面大小 == 0) ? (数据条数/页面大小):(数据条数/页面大小+1)

4.当前页(页码)
    用户自定页

5.当前页的对象集合(实体类集合):每页所显示的所有数据(10个人的信息)
    查数据库,分页sql
    List<Student>

mysql中使用limit实现分页

limit 是一个MySQL"方言" oracle不支持

语法:limit 开始的索引,每页查询的条数;

-- 每页显示3条记录
SELECT * FROM student LIMIT 0,3; -- 第1页
SELECT * FROM student LIMIT 3,3; -- 第2页
SELECT * FROM student LIMIT 6,3; -- 第3页

分页sql-mysql

Mysql数据库最简单就是利用LIMIT,从数据库表中M条记录开始检索N条记录的语句为:
SELECT [列名列表] FROM 表名称 LIMIT M,N
例如从表Sys_option(主键为sys_id)中从10条记录开始检索20条记录,语句如下:
select * from sys_option limit 10,20

分页sql-sqlserver

SQL Server
从数据库表中的第M条记录开始取N条记录,利用Top关键字(如果Select语句中既有top,又有orderby,则是从排序好的结果集中选择):
SELECT *
FROM ( SELECT Top N *
    FROM (SELECT Top (M + N - 1) * FROM  表名称  Order by 主键 desc) t1 ) t2
Order by 主键 asc;

例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
SELECT *
FROM (SELECT TOP 20 *
FROM (SELECT TOP 29 * FROM Sys_option order by sys_id desc) t1) t2
Order by sys_id asc;

标签:分页,sal,--,select,sql,rownum,SELECT
来源: https://www.cnblogs.com/jiyuchen1/p/16398620.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有