[Aprendizaje de base de datos] Consulta de paginación

Tabla de contenido


ilustrar

La consulta de paginación es para permitirnos consultar con precisión una determinada parte de los datos. Se puede entender de la misma manera que lo que hacemos en la siguiente página de la página web: cuántos datos se consultan en una página y cuáles. La fila de datos comienza a mostrarse y todos están paginados. Se puede realizar la consulta.

gramática

1.sintaxis mysql

Nota: límite es la sintaxis de paginación en MySQL, pero también limita el número de resultados de la consulta.
Nota: ¡el número después del límite debe ser un número entero!

- Especificar posición inicial

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

La posición inicial comienza desde 0.

- No especificar posición inicial

limit 记录数

"Número de registros" indica el número de registros mostrados. Si el valor de "Número de registros" es menor que el número total de resultados de la consulta, se mostrará el número de registros especificado comenzando desde el primer registro. Si el valor de "Número de registros" es mayor que el número total de resultados de la consulta, todos los registros consultados se mostrarán directamente.

- Usado con compensación

limit 记录数 offset 初始位置

2.sintaxis del servidor SQL

El autor original tiene un código para comprobar el rendimiento, por lo que si está interesado, puede consultar el enlace al final del artículo.

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

- Triple bucle

1. Primero busque las primeras 20 páginas, luego invierta el orden y obtenga los primeros 10 registros en orden inverso. De esta manera, puede obtener los datos necesarios para la paginación, pero el orden es inverso. Luego puede devolverlos en orden inverso. O puede dejar de ordenar y entregarlo directamente Clasificación front-end.

-- 分页查询(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. Primero consulte los primeros 10 registros, luego use not in para excluir estos 10 registros y luego vuelva a consultar. Sin código.

- Utilizar max (clave principal)

Primero, encabeza los primeros 11 registros de fila, luego usa max(id) para obtener la identificación más grande y luego consulta los 10 registros principales nuevamente en esta tabla, pero agrega la condición, donde 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;

- Utilice la palabra clave número_fila (sólo disponible en la versión 2005 y superior)

Utilice directamente la función row_number() over(order by id) para calcular el número de filas, seleccione el número correspondiente de filas y regrese

-- 分页查询(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 (solo disponible en la versión 2012 y superior)

compensar las filas A, descartar los registros A anteriores, buscar solo las siguientes filas B, leer los datos B al revés.

-- 分页查询(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 ;

Nota: El autor original recomienda el último, el rendimiento del primero es muy pobre, no tengo experiencia práctica y no puedo juzgar, así que lo copio.

3.sintaxis orcale

- Utilice el número de fila de pseudocolumna

1. Consulta los primeros 10 registros.

select * from 数据表 where ROWNUM <10;

2. Según la clasificación de ID, al tomar los primeros tres registros,
no puede usar > (un valor mayor que 1), >= (un valor mayor o igual a 1), = (un valor mayor o igual a 1 ) para ROWNUM, de lo contrario no habrá resultado, por lo que directamente Solo puede comenzar desde 1 y
no hay ningún registro para rownum >10, porque si el primero no se satisface y se elimina, el rownum del segundo volverá a ser 1 , por lo que nunca habrá un registro que cumpla la condición.

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

3. Si desea usar Rownum en lugar de comenzar desde 1, debe usarlo de la siguiente manera

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

- Consulta de paginación uno.

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

- Consulta de paginación 2

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

- Consulta de paginación tres.

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

Como no he aprendido Oracle, son interceptados de otras partes, consulte otras partes.

Link de referencia

1. LÍMITE de MySQL: limita el número de resultados de la consulta
2. Consulta de paginación de la base de datos
3. Cuatro métodos de paginación del servidor SQL (considerados muy completos)
4. Tres métodos de paginación de la base de datos Oracle

Supongo que te gusta

Origin blog.csdn.net/Daisy74RJ/article/details/124016454
Recomendado
Clasificación