Oracle Database
Limiter les lignes renvoyées par une requête (Pagination)
Recherche…
Récupère les N premières lignes avec la clause de limitation de ligne
La clause FETCH
a été introduite dans Oracle 12c R1:
SELECT val
FROM mytable
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;
Un exemple sans FETCH qui fonctionne aussi dans les versions précédentes:
SELECT * FROM (
SELECT val
FROM mytable
ORDER BY val DESC
) WHERE ROWNUM <= 5;
Pagination en SQL
SELECT val
FROM (SELECT val, rownum AS rnum
FROM (SELECT val
FROM rownum_order_test
ORDER BY val)
WHERE rownum <= :upper_limit)
WHERE rnum >= :lower_limit ;
de cette façon, nous pouvons paginer les données de la table, tout comme la page Web serch
Obtenir N nombres d'enregistrements de la table
Nous pouvons limiter le nombre de lignes du résultat en utilisant la clause rownum
select * from
(
select val from mytable
) where rownum<=5
Si nous voulons le premier ou le dernier enregistrement, nous voulons une clause order by dans la requête interne qui donnera un résultat basé sur la commande.
Last Five Record:
select * from
(
select val from mytable order by val desc
) where rownum<=5
Premier cinq records
select * from
(
select val from mytable order by val
) where rownum<=5
Récupère les lignes N à M à partir de nombreuses lignes (avant Oracle 12c)
Utilisez la fonction analytique row_number ():
with t as (
select col1
, col2
, row_number() over (order by col1, col2) rn
from table
)
select col1
, col2
from t
where rn between N and M; -- N and M are both inclusive
Oracle 12c gère cela plus facilement avec OFFSET
et FETCH
.
Sauter quelques lignes puis prendre quelques
Dans Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;
Dans les versions antérieures
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber BETWEEN 21 AND 40
Ignorer certaines lignes du résultat
Dans Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 5 ROWS;
Dans les versions antérieures
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber > 20
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow