Skip to content

LIMIT & OFFSET – Paginer les résultats

Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 5 minutes


La clause LIMIT est à utiliser dans une requête SQL pour spécifier le nombre maximum de résultats que l’on souhaite obtenir. Cette clause est souvent associée à un OFFSET, c’est-à-dire un décalage sur le jeu de résultats. Ces 2 clauses permettent par exemple d’effectuer des systèmes de pagination (exemple : récupérer les 10 articles de la page 4).

Attention : Selon le système de gestion de base de données, la syntaxe peut être différente. Ce chapitre présente donc la syntaxe pour MySQL, PostgreSQL et SQLite.


Syntaxe commune (MySQL, PostgreSQL, SQLite)

Section titled “Syntaxe commune (MySQL, PostgreSQL, SQLite)”

La syntaxe la plus répandue est la suivante :

SELECT * FROM table LIMIT 10;

Cette requête permet de récupérer seulement les 10 premiers résultats d’une table. Bien entendu, si la table contient moins de 10 résultats, alors la requête retournera toutes les lignes.


Pour récupérer un bloc de résultats après un certain décalage, on utilise OFFSET.

La syntaxe est la suivante :

SELECT * FROM table LIMIT 10 OFFSET 5;

Cette requête permet de récupérer les résultats 6 à 15 (car l’OFFSET commence toujours à 0). À titre d’exemple, pour récupérer les résultats 16 à 25, il faudrait donc utiliser : LIMIT 10 OFFSET 15.

💡 Bon à savoir : Utiliser OFFSET 0 revient au même que d’omettre l’OFFSET.

La syntaxe avec MySQL est légèrement différente :

SELECT * FROM table LIMIT 5, 10;

Cette requête retourne les enregistrements 6 à 15 d’une table. Le premier nombre est l’OFFSET tandis que le suivant est la limite.

SGBD Syntaxe Récupère les lignes
PostgreSQL, SQLite LIMIT 10 OFFSET 5 6 à 15
MySQL LIMIT 5, 10 6 à 15

Imaginons une table « article » contenant 100 articles. Pour afficher les articles page par page, avec 10 articles par page :

SELECT * FROM article ORDER BY date_publication DESC LIMIT 10 OFFSET 0;

ou (MySQL) :

SELECT * FROM article ORDER BY date_publication DESC LIMIT 0, 10;
SELECT * FROM article ORDER BY date_publication DESC LIMIT 10 OFFSET 10;

ou (MySQL) :

SELECT * FROM article ORDER BY date_publication DESC LIMIT 10, 10;
SELECT * FROM article ORDER BY date_publication DESC LIMIT 10 OFFSET 20;

ou (MySQL) :

SELECT * FROM article ORDER BY date_publication DESC LIMIT 20, 10;

Bon à savoir : l’importance de ORDER BY

Section titled “Bon à savoir : l’importance de ORDER BY”

La bonne pratique lorsque l’on utilise LIMIT consiste à utiliser également la clause ORDER BY pour s’assurer que ce sont toujours les bonnes données qui sont présentées. En effet, si le système de tri est non spécifié, l’ordre est en principe indéterminé et les résultats peuvent être imprévisibles (et changer d’une exécution à l’autre).

-- ❌ Risqué : ordre non garanti
SELECT * FROM article LIMIT 10;
-- ✅ Recommandé : ordre explicite
SELECT * FROM article ORDER BY id DESC LIMIT 10;

Certains développeurs pensent à tort que l’utilisation de LIMIT permet de réduire le temps d’exécution d’une requête. Or, le temps d’exécution est sensiblement le même car le SGBD va récupérer toutes les lignes correspondant à la requête PUIS seulement les résultats définis par LIMIT et OFFSET seront retournés. Au mieux, utiliser LIMIT permet de réduire le temps d’affichage car il y a moins de lignes à envoyer au client.

Cependant, si la requête utilise un index pour le tri (ORDER BY sur une colonne indexée), le SGBD peut optimiser et ne parcourir que les lignes nécessaires. Dans tous les cas, pour de très grands offsets (ex: OFFSET 100000), les performances peuvent se dégrader car le SGBD doit quand même parcourir les lignes avant l’offset.

💡 Astuce : Pour les très grandes paginations, on peut utiliser une approche “cursor-based” (basée sur un curseur, par exemple en filtrant sur un ID) plutôt que OFFSET.


Vous savez désormais comment paginer vos résultats avec LIMIT et OFFSET. Mais comment regrouper des données pour effectuer des statistiques ou des totaux ?

👉 Chapitre 13 : GROUP BY – Grouper les données

Bonne continuation !


Junior TSAFACK – 08/08/2026