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.
LIMIT avec OFFSET
Section titled “LIMIT avec OFFSET”Pour récupérer un bloc de résultats après un certain décalage, on utilise OFFSET.
PostgreSQL et SQLite
Section titled “PostgreSQL et SQLite”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 0revient 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.
Résumé des syntaxes
Section titled “Résumé des syntaxes”| SGBD | Syntaxe | Récupère les lignes |
|---|---|---|
| PostgreSQL, SQLite | LIMIT 10 OFFSET 5 |
6 à 15 |
| MySQL | LIMIT 5, 10 |
6 à 15 |
Exemple concret
Section titled “Exemple concret”Imaginons une table « article » contenant 100 articles. Pour afficher les articles page par page, avec 10 articles par page :
Page 1 (lignes 1 à 10)
Section titled “Page 1 (lignes 1 à 10)”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;Page 2 (lignes 11 à 20)
Section titled “Page 2 (lignes 11 à 20)”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;Page 3 (lignes 21 à 30)
Section titled “Page 3 (lignes 21 à 30)”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 garantiSELECT * FROM article LIMIT 10;
-- ✅ Recommandé : ordre expliciteSELECT * FROM article ORDER BY id DESC LIMIT 10;Performances
Section titled “Performances”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.
Prochain chapitre
Section titled “Prochain chapitre”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