SQL Quest
Se connecter English 0 XP Niv. 1
Débutant

SQL LIMIT et OFFSET : limiter et paginer

4 min de lecture · 3 exemples exécutables · mis à jour le 9 octobre 2026

« Les 5 produits les plus chers », « les 10 dernières commandes », « la page 3 des résultats »… Toutes ces demandes reposent sur deux mots-clés : LIMIT, qui garde un nombre maximum de lignes, et OFFSET, qui en saute un certain nombre.

Syntaxe

SELECT colonnes
FROM table
ORDER BY colonne
LIMIT nombre OFFSET lignes_a_sauter;

Comment ça marche

  • LIMIT n garde au plus n lignes.
  • OFFSET k saute les k premières lignes avant de commencer à garder.

Ces deux clauses s'appliquent après le tri. Un LIMIT sans ORDER BY renvoie donc des lignes quelconques : pour un « top 5 », le tri est indispensable.

Paginer des résultats

Pour afficher des pages de 10 lignes, la page p (en commençant à 1) s'obtient avec LIMIT 10 OFFSET (p - 1) * 10.

Selon les bases de données

LIMIT existe en SQLite, MySQL et PostgreSQL. SQL Server utilise SELECT TOP 5 …, et le standard SQL (Oracle, PostgreSQL, SQL Server) propose OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY.

Schéma

produits triés
nomprix
Écran289
SSD149
Clavier49
Plaid25
résultat
nomprix
Écran289
SSD149
ORDER BY prix DESC LIMIT 2 : après le tri, on ne garde que les deux premières lignes.

Schéma simplifié pour illustrer le principe. Les exemples ci-dessous utilisent la vraie base d'exercices de SQL Quest (une boutique en ligne fictive : voir le schéma complet).

Exemples avec leurs résultats

1. Le top 5

Les 5 produits les plus chers.

SELECT nom, prix
FROM produits
ORDER BY prix DESC
LIMIT 5;
Essayer dans le bac à sable
Résultat
nomprix
Écran 27"342
SSD 1To317
Souris sans fil103
Webcam HD101
Casque gaming98

5 lignes au total

2. Paginer avec OFFSET

La « page 2 » des produits classés par prix décroissant, 5 par page.

SELECT nom, prix
FROM produits
ORDER BY prix DESC
LIMIT 5 OFFSET 5;
Essayer dans le bac à sable
Résultat
nomprix
Bougie parfumée60,92
Lampe LED51,74
Hub USB-C49
Cafetière47,62
Raquette46,18

5 lignes au total

3. La dernière commande

Avec un tri décroissant, LIMIT 1 donne la commande la plus récente.

SELECT id, date_commande, statut
FROM commandes
ORDER BY date_commande DESC, id DESC
LIMIT 1;
Essayer dans le bac à sable
Résultat
iddate_commandestatut
4732025-12-28livrée

1 ligne au total

Les erreurs fréquentes

LIMIT sans ORDER BY

Le « top 5 » n'a aucun sens sans tri : la base renvoie 5 lignes au hasard de son stockage.

À éviter
SELECT nom, prix FROM produits LIMIT 5;
Correct
SELECT nom, prix FROM produits ORDER BY prix DESC LIMIT 5;

Se tromper dans le calcul de l'OFFSET

La première page commence à OFFSET 0, pas 1. Avec OFFSET 1, on perd la première ligne.

À éviter
SELECT nom FROM produits ORDER BY nom LIMIT 5 OFFSET 1;
Correct
SELECT nom FROM produits ORDER BY nom LIMIT 5 OFFSET 0;

Ignorer les égalités

Si plusieurs lignes sont à égalité à la limite, LIMIT en coupe une arbitrairement. Ajoutez une colonne de départage (comme l'id) dans le ORDER BY.

À éviter
SELECT * FROM commandes ORDER BY date_commande DESC LIMIT 3;
Correct
SELECT * FROM commandes ORDER BY date_commande DESC, id DESC LIMIT 3;

Exercices

Essayez d'écrire la requête vous-même avant d'ouvrir la solution.

Défi 1. Affichez les 3 employés les mieux payés (prénom, nom, salaire).

Voir une solution
SELECT prenom, nom, salaire FROM employes ORDER BY salaire DESC LIMIT 3;
prenomnomsalaire
ChloéDubois9 500
NathanRoux6 800
JadeLefebvre6 200

3 lignes au total

Essayer dans le bac à sable

Défi 2. Affichez les clients 11 à 20 par ordre alphabétique de nom.

Voir une solution
SELECT nom, prenom FROM clients ORDER BY nom, prenom LIMIT 10 OFFSET 10;
nomprenom
BernardLucas
BernardSamir
BlancLucas
BlancLucas
BlancLéa
BlancRayan
BlancSarah
BonnetChloé

10 lignes au total · 8 affichées

Essayer dans le bac à sable
Envie de vous entraîner davantage ?

Les exercices interactifs sont corrigés automatiquement, avec un prof qui explique vos erreurs. Une leçon résumée reste affichée à côté de l'éditeur.

Faire les exercices interactifs

Questions fréquentes

Quel est l'équivalent de LIMIT en SQL Server ?

SELECT TOP 5 colonnes FROM table, ou la syntaxe standard OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY après un ORDER BY.

Peut-on écrire LIMIT 10, 5 ?

Oui en SQLite et MySQL : c'est l'ancienne syntaxe LIMIT décalage, nombre. Elle équivaut à LIMIT 5 OFFSET 10, plus lisible.

OFFSET est-il efficace sur de grandes tables ?

Pas toujours : pour atteindre la page 1000, la base doit quand même parcourir toutes les lignes précédentes. Les applications à fort volume paginent plutôt à partir de la dernière valeur vue (WHERE id > dernier_id).

À lire ensuite