您现在的位置是:首页 >技术杂谈 >学习记录:2023.5.4网站首页技术杂谈

学习记录:2023.5.4

? Adore ? 2024-05-30 13:35:54
简介学习记录: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()进行分页查询的优点是灵活性高,可以实现各种不同的分页方式,缺点是语法较为复杂。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。