您现在的位置是:首页 >技术杂谈 >学习记录:2023.5.4网站首页技术杂谈
学习记录:2023.5.4
简介学习记录:2023.5.4
2023.5.4 学习记录
数据库:
一、 MySQL和Oracle数据库分页功能
- MySQL分页:
使用limit关键字实现分页
LIMIT出现在查询语句的最后,可以使用一个参数或两个参数来限制取出的数据。其中第一个参数代表偏移量:offset(可选参数),第二个参数代表取出的数据条数:rows
/* 单参数查询 查询前5条数据 */
SELECT * FROM Student LIMIT 5;
/* 双参数查询 查询第1-10条数据 */
SELECT * FROM Student LIMIT 0,10;
/* 查询第11-20条数据 */
SELECT * FROM Student LIMIT 10 OFFSET 10;
在进行分页之前,我们需要先根据数据总量来得出总页数,这需要用到COUNT函数和向上取整函数CEIL,SQL如下:
/* 获得数据总条数 */
SELECT COUNT(*) FROM Student;
/* 假设每页显示10条,则直接进行除法运算,然后向上取整 */
SELECT CEIL(COUNT(*) / 10) AS pageTotal FROM Student;
参数:
offset:(pageNumber - 1) * pageSize :第pageNumber页
rows:pageSize : 每页的数据量
- Oracle分页:
1、使用ROWNUM关键字进行分页:
ROWNUM是Oracle中一个伪列,它用于表示返回的行的序号。使用ROWNUM进行分页查询的方法是在SELECT语句中加入WHERE子句,并在WHERE子句中指定ROWNUM的取值范围;需要指定大小值。
SELECT *
FROM (
SELECT a.*, ROWNUM r
FROM my_table a
WHERE ROWNUM <= 30
)
WHERE r >= 20;
上述查询语句的意思是查询my_table表中的前30条记录,然后在这30条记录中取出第20到第30条记录作为结果返回。使用ROWNUM进行分页查询的优点是简单易懂,缺点是在查询大量数据时性能较差。
select * from(
select rownum r,t.* from(
select m.* from my_table m order by m.id desc ) t
// pageSize:每页的数据量;pageNumber :页码,从0开始
where rownum < pageSize*(pageNumber + 1) //使用rownum关键字来进行分页 做小于项的设置
)
where r > pageSize*(pageNumber - 1); //分页的大于项设置
2、使用OFFSET和FETCH语句
OFFSET和FETCH是Oracle 12c引入的语法,它们可以更方便地实现分页查询。使用OFFSET和FETCH进行分页查询的方法是在SELECT语句中加入OFFSET和FETCH子句
SELECT *
FROM my_table
ORDER BY my_column
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
上述查询语句的意思是对my_table表按照my_column列进行排序,然后取出从第21条记录开始的10条记录作为结果返回。使用OFFSET和FETCH进行分页查询的优点是简单方便,缺点是只有在Oracle 12c及以上版本中才能使用。
3、使用ROW_NUMBER() OVER()
ROW_NUMBER() OVER()是Oracle中一种用于计算行号的函数。使用ROW_NUMBER() OVER()进行分页查询的方法是在SELECT语句中加入ROW_NUMBER() OVER()函数,并在WHERE子句中指定ROW_NUMBER() OVER()的取值范围
SELECT *
FROM (
SELECT a.*, ROW_NUMBER() OVER (ORDER BY my_id) r
FROM my_table a
)
WHERE r BETWEEN 21 AND 30;
上述查询语句的意思是对my_table表按照my_id列进行排序,然后取出第21到第30条记录作为结果返回。使用ROW_NUMBER() OVER()进行分页查询的优点是灵活性高,可以实现各种不同的分页方式,缺点是语法较为复杂。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。