分页查询相关知识:一篇文章让你豁然开朗

简介: 分页查询相关知识:一篇文章让你豁然开朗

分页查询

分页查询

分页查询是将查询表中数据时分段查询,而不是一次性将所有数据查询出来。

有时查询的数据量非常庞大,这导致系统资源消耗大,响应速度长,数据冗余严重。

数据库故采用分页查询,但是不同数据库语法不同。

Oracle 中的分页是基于伪列ROWNUM实现。

ruwnum 不存在任何一张表中,但是所有的表都可以查询该字段。该字段的值使随着查询自动生成的,方式是:每当可以从表中查询出一条记录,该字段的值即为该条记录的行号。 从一开始,逐次递增。

select rownum,kname,sal from k

在使用rownum对结果集进行编号过程中,不能使用rownum>1以上的数字判断,否则回合下图一样,查不出任何数据。

select * FROM (select rownum rn,sal,kname from k )where  rn      between 6 and 8

分页查询中有排序需求,先排序在分页查询。

如果需要查询工资6-8的员工信息,先排序,在编号,在查询。
select kname,sal,depino from order by sal desc
select rownum rn,l.* from(select kname,sal,depino from order by sal desc) l
select * from (select rownum rn,l.* from(select kname,sal,depino from k order by sal desc)l)where rn between 6 and 8

有时在分页查询中,只需要查部分数据,可以对用where条件限制伪列,节省资源。

select * from 
(select rownum rn,l.* from 
(select kname,sal,id from k order by sal desc) l where rownum<=8)
where rn >6

计算区间公式。

pagesize:每页显示的条目数

page: 页数

start :(page-1)*pagesize+1

end:pagesize*page

select * from 
(select rownum rn,l.* from 
(select kname,sal,id from k order by sal desc) l where rownum<=end)
where rn >start


decode函数

可以实现分之效果的函数。

select id,kname,sal,
decode(depino,
       10,sal*1.2,
       20,sal*1.3,
       30,sal*1.5,
       sal) end
from k
case 操作

select depino,kname,sal,
 case depino when 10 then sal*1.2
              when 20 then sal*1.4
              else sal end
              bonus
from k

decode()在group by 中的使用。

select count(*),
 decode (depino,
        10,100,
        20,100,
        200 )
 from k
 group by decode(
        depino,
        10,100,
        20,100,
        200)

select depino,kname from k
order by
decode (depino,
10,1
20,2
30)




排序函数

排序函数允许对结果集按照指定的字段分组,在组内在按照指定的字段排序,最终生成组内编号。

row_number() 函数
select kname,sal,depino,row_number() over(
partition by depino
order by sal desc
) rank
from k

rank() 函数

生成组内不连续也不唯一的数字,同组内排序字段值一样的记录,生成的数字也一样。

select kname,sal,depino,rank() over(
partition by depino
order by sal desc
) rank
from k

dense_rank()函数

dense_rank()函数生成组内连续但不唯一的数字。

select kname,sal,depino,dense_rank() over(
partition by depino
order by sal desc
 ) rank
from k

create table sales_tab(
year_id number not null,
month_id number not null,
day_id number not null,
sales_value number(10,2)not null
)
insert into sales_tab
select trunc(dbms_random.value(2021,2022))AS year_id,
trunc(dbms_random.value(1,13))as month_id,
trunc(dbms_random.value(1,32))as day_id,
round(dbms_random.value(1,100),2)as sales_value
from dual
connect by level<=100
目录
相关文章
|
11天前
|
数据库 JavaScript SQL
❤Nodejs 第八章(操作本地数据库优化查询为分页查询方式)
【4月更文挑战第8天】在Node.js中,本章讲述了如何优化本地数据库查询以实现分页。首先,添加了前端分页参数`pageNum`(页码)和`pageSize`(每页条数)。接着,通过打印`req.query`来验证参数是否正确传递。初始查询示例为`SELECT * FROM user WHERE age = 18 LIMIT 0, 10`。当改变分页参数时,查询能相应更新。在实现动态偏移量`offset`时,起初因误添加`' AND' : ' WHERE'`导致错误,修正后使用`LIMIT`和计算出的`offset`进行分页。
47 5
❤Nodejs 第八章(操作本地数据库优化查询为分页查询方式)
|
4月前
分页查询在某些场景下引发的数据漏处理问题
分页查询在某些场景下引发的数据漏处理问题
24 0
|
10月前
|
前端开发 JavaScript 数据库
SsmAjaxJson分页效果的操作(第十七课)
SsmAjaxJson分页效果的操作(第十七课)
78 0
|
11月前
|
SQL 数据库
【牛腩】-真假分页
【牛腩】-真假分页
46 0
|
SQL 消息中间件 JavaScript
求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。
求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。
|
关系型数据库 MySQL 数据库
MySQL数据库:第十章:分页查询
MySQL数据库:第十章:分页查询
|
Java 数据库连接 mybatis
【手撕Mybatis的分页插件】【查询结果集是0,直接返回[]】【提高查询我们的性能】
【手撕Mybatis的分页插件】【查询结果集是0,直接返回[]】【提高查询我们的性能】
【手撕Mybatis的分页插件】【查询结果集是0,直接返回[]】【提高查询我们的性能】
|
开发者 微服务
讲师分页查询(分页添加) | 学习笔记
快速学习讲师分页查询(分页添加)
74 0
讲师分页查询(分页添加) | 学习笔记
|
SQL 缓存 Oracle
MyBatis 别再乱用 foreach 批量插入了,5000 数据用了 14 分钟,实力劝退。。
MyBatis 别再乱用 foreach 批量插入了,5000 数据用了 14 分钟,实力劝退。。
390 0
MyBatis 别再乱用 foreach 批量插入了,5000 数据用了 14 分钟,实力劝退。。
|
SQL 缓存 Oracle
求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟
求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟
求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟