目录

文章目录

  • 说明
  • 语法
    • 1.mysql语法
      • - 指定初始位置
      • - 不指定初始位置
      • - 配合offset使用
    • 2.sql server语法
      • - 三重循环
      • - 利用max(主键)
      • - 利用row_number关键字(2005版本以上才有)
      • - offset /fetch next(2012版本及以上才有)
    • 3.orcale语法
      • - 采用伪列 rownum
      • - 分页查询一
      • - 分页查询二
      • - 分页查询三
  • 参考链接

说明

分页查询是为了让我们准确查询到某部分的数据,跟我们在网页的下一页那类是可以同等理解的,一页查询多少条数据,从数据的第几行开始显示,都是这个分页查询可以实现的。

语法

1.mysql语法

说明:limit是mysql中的分页语法,但也是限制查询结果的条数
注意:limit后的数必须是整数!

- 指定初始位置

select 字段名 from 数据表名  limit 初始位置,记录条数

初始位置从0开始

- 不指定初始位置

limit 记录数

“记录数”表示显示记录的条数。如果“记录数”的值小于查询结果的总数,则会从第一条记录开始,显示指定条数的记录。如果“记录数”的值大于查询结果的总数,则会直接显示查询出来的所有记录。

- 配合offset使用

limit 记录数 offset 初始位置

2.sql server语法

原作者中带有查看性能的代码,所以有兴趣可以去看文尾的链接。

-- 设置执行时间开始,用来查看性能的
set statistics time on ;

- 三重循环

1.先取前20页,然后倒序,取倒序后前10条记录,这样就能得到分页所需要的数据,不过顺序反了,之后可以将再倒序回来,也可以不再排序了,直接交给前端排序。

-- 分页查询(top)
select *
from (select top pageSize *
from (select top (pageIndex*pageSize) *
from 数据表
order by 字段id asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
as temp_sum_student -- 另命名
order by 字段id desc ) temp_order
order by 字段id asc-- 分页查询第2页,每页有10条记录
select *
from (select top 10 *
from (select top 20 *
from 数据表
order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
as temp_sum_student
order by 字段id desc ) temp_order
order by 字段id asc
;

2.先查询出前10条记录,然后用not in排除了这10条,再查询。无代码。

- 利用max(主键)

先top前11条行记录,然后利用max(id)得到最大的id,之后再重新再这个表查询前10条,不过要加上条件,where id>max(id)。

-- 分页查询(max)
select top pageSize *
from 数据表
where 字段id>=
(select max(字段id)
from (select top ((pageIndex-1)*pageSize+1) 字段id
from 数据表
order by  字段id asc) temp_max_ids)
order by 字段id;
-- 分页查询第2页,每页有10条记录
select top 10 *
from 数据表
where 字段id>=
(select max(字段id)
from (select top 11 字段id
from 数据表
order by 字段id asc) temp_max_ids)
order by 字段id;

- 利用row_number关键字(2005版本以上才有)

直接利用row_number() over(order by id)函数计算出行数,选定相应行数返回即可

-- 分页查询(row_number)
select top pageSize *
from (select row_number()
over(order by 字段id asc) as rownumber,*
from 数据表 ) temp_row
where rownumber>((pageIndex-1)*pageSize);-- 分页查询第2页,每页有10条记录
select top 10 *
from (select row_number()
over(order by 字段id asc) as rownumber,*
from 数据表 ) temp_row
where rownumber>10;

- offset /fetch next(2012版本及以上才有)

offset A rows ,将前A条记录舍去,fetch next B rows only ,向后在读取B条数据。

-- 分页查询(offset /fetch next)
select * from 数据表
order by 字段id
offset ((@pageIndex-1)*@pageSize) rows
fetch next @pageSize rows only;-- 分页查询第2页,每页有10条记录
select * from 数据表
order by 字段id
offset 10 rows
fetch next 10 rows only ;

说明:原作者推荐最后一种,第一种性能很差,本人没有实操,无法判定,故照搬。

3.orcale语法

- 采用伪列 rownum

1.查询前10条记录

select * from 数据表 where ROWNUM <10;

2.按照ID排名,抓取前三条记录
不能对ROWNUM使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值),否则无结果,所以直接用只能从1开始
rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。

select * from 数据表 where rownum>=1;

3.如果想要用rownum不从1开始,需按下面方法使用

select 表别名.*
from (select 数据表.*,rownum rn from 数据表) 表别名
where rn >5;

- 分页查询一

select * from (
select 表别名.*,rownum rn from (
select * from 数据表) 表别名
where rownum <=5)
where rn>=2;

- 分页查询二

select 表别名.* from (
select 数据表.*,rownum rn
from 数据表
where rownum <=5) 表别名
where rn >=3;

- 分页查询三

select 表别名.* from (
select 数据表.*,rownum rn
from 数据表) 表别名
where rn between 3 and 5;

因为我没有学过oracle,所以都是其他部分截取,请多参考其他的。

参考链接

1.MySQL LIMIT:限制查询结果的条数
2.数据库分页查询
3.SQL server分页的四种方法(算很全面了)
4.Oracle数据库分页的三种方法

数据库学习之分页查询相关推荐

  1. 零基础带你学习MySQL—分页查询(十八)

    零基础带你学习MySQL-分页查询(十八)

  2. 数据库:SQLServer分页查询整理

    作为程序员来说,与数据库打交道是十分频繁的分页查询是一个开发者必须掌握的基本知识点,目前整理了下面三种SQLServer分页查询语句的写法,仅供参考. 一.Top Not IN 方式(查询靠前的数据较 ...

  3. 使用servlet来实现对数据库的模糊分页查询

    首先要注意一个问题,通过servlet来获取到你jsp页面输入要要查询的关键字,将这些关键字赋值给一对象,通过对象从数据库查出数据之后,当你查询出来的对象用好多页显示,当你点击下一页的时候就会发现会返 ...

  4. java oracle数据库高效分页查询_Oracle学习之分页查询数据

    Oracle的分页是不同于MySQL的,今天我们来讨论一下Oracle的分页,首先得知道两个概念 rowid和rownum 什么鬼?有鸟用啊? 我们从字面的英文翻译可以知道rowid是 "行 ...

  5. SQL语言之DQL语言学习(十一)分页查询

    应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求语法: 语法: select查询列表 from表 [join type join表2 on连接条件 where筛选条件 group by分 ...

  6. java 分页查询实例_JavaWeb学习之分页查询实例

    一.环境搭建 客户端(发送请求)=> Servlet(处理请求,1.指定处理Service 2.指定对应页面) => Service(业务处理.1.调用具体Dao并对返回数据做对应处理) ...

  7. 数据库学习7 — 嵌套查询

    章节3.4.3 嵌套查询 1.带有IN谓词的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词的子查询 1)比较运算符 2)ANY(或SOME).ALL谓词与聚集函数.IN谓词 ...

  8. 学习笔记 | 分页查询employees表,每5行一页,返回第2页的数据

    select * from employees limit 5 offset 5

  9. 数据库学习--Hibernate方言(是什么 为什么 怎么办)

    原文地址:数据库学习–Hibernate方言(是什么 为什么 怎么办) 知识储备 HQL和SQL. 是什么 HQL : Hibernate Query Language,Hibernate查询语言 . ...

最新文章

  1. 解答:CF截图保存在哪
  2. 图解用工具对PE文件格式做初步研究
  3. MySQL(10)数据库实现高可用架构之MHA
  4. CodeForces - 850C Arpa and a game with Mojtaba(博弈+sg函数)
  5. java工作台无法显示_【Eclipse】使用指南(18)搜索工作台
  6. 华为云GaussDB(for MySQL)2.0全新升级,三大技术大揭秘
  7. java 对象查找_通过Java中的参数集查找最合适的对象
  8. 陕师大计算机科学学院研究生,陕师大研究生
  9. 如何轻松了解 Python 必学的 django 框架?
  10. IE6 PNG透明终极解决方案
  11. 【李宏毅2020 ML/DL】P83 Generative Adversarial Network | Evaluation
  12. Cpp调用C中的函数
  13. 2017世界GDP排行地图可视化
  14. Win系统 - 该扩展程序并未列在Chrome应用商店中怎么样办?
  15. 一种网格去噪算法(基于平均面法向的均值滤波)
  16. CMDN CLUB第14场:小米与友盟专家详解Android开发:
  17. comsol软件入门基本操作
  18. 一对数的和等于给定的数
  19. Spring的第二次模拟考试
  20. 职教云python程序设计答案_智慧职教云课堂2020Python程序设计基础章节答案

热门文章

  1. 每年支付 m 次的年金
  2. 什么是虚拟机?虚拟机有什么用? 虚拟机的特点?
  3. 计算机的ip能与网关一样,网关和ip地址一样吗
  4. 使用通用的单变量选择特征选择提高Kaggle分数
  5. Xilinx zynq 7010/7020 GPIO - MIO
  6. resnet 论文笔记
  7. 基于Android平台实现匿名社交论坛【附项目源码】
  8. 获取运行中的Word对象
  9. 【前端圭臬】十一:从规范看 JavaScript 执行上下文(下)
  10. YOLO 损失函数 loss