0Pricing
SQL Interview Prep · Leçon

LIMIT, OFFSET et FETCH FIRST

Syntaxe de la pagination avec MySQL, Postgres et SQL Server

LIMIT, OFFSET et FETCH FIRST est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.

La pagination est une question qui dépend du dialecte

« Comment récupérer les 10 premières lignes ? » semble trivial jusqu'à ce que le recruteur ajoute « et le faire en SQL standard » ou « maintenant en SQL Server ». La syntaxe de limitation des lignes est l'une des fonctionnalités les plus disparates selon les bases de données.

Cette leçon présente les trois principales formes : LIMIT (MySQL/PostgreSQL/SQLite), OFFSET ... FETCH (norme ANSI, SQL Server) et l'ancien TOP (SQL Server).

LIMIT dans MySQL et PostgreSQL

La forme la plus courante est LIMIT n, qui plafonne le résultat à n lignes. Elle est prise en charge par MySQL, PostgreSQL et SQLite.

Point essentiel : LIMIT est appliqué après ORDER BY dans l'ordre d'exécution logique, vous les associez donc presque toujours. Limiter sans trier vous donne un ensemble de lignes arbitraire.

SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10;

OFFSET pour ignorer des lignes

La pagination nécessite un décalage pour ignorer les pages précédentes. OFFSET m ignore les m premières lignes avant l'application de la limite.

Pour obtenir la page 3 avec une taille de page de 10, vous ignorez 20 lignes et en prenez 10. La formule générale est OFFSET = (page - 1) * page_size.

SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 20;

Syntaxe avec virgule de MySQL

MySQL accepte également une forme à deux arguments séparés par une virgule : LIMIT offset, count. Notez que l'ordre est inversé par rapport à la forme avec mot-clé, ce qui piège souvent les utilisateurs.

LIMIT 20, 10 signifie qu'il faut ignorer 20 lignes puis en prendre 10, ce qui est identique à LIMIT 10 OFFSET 20. Préférez la forme avec mots-clés pour plus de clarté en entretien.

SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 20, 10;

La norme ANSI : FETCH FIRST

La norme SQL utilise OFFSET ... ROWS FETCH FIRST ... ROWS ONLY. PostgreSQL, Oracle 12c+, DB2 et SQL Server 2012+ la prennent tous en charge.

La syntaxe paraît verbeuse, mais c'est le choix portable. ROW et ROWS sont interchangeables ; FIRST et NEXT sont synonymes.

SELECT name, salary
FROM employees
ORDER BY salary DESC
OFFSET 20 ROWS
FETCH FIRST 10 ROWS ONLY;

TOP de SQL Server

L'ancien code SQL Server utilise TOP n juste après SELECT. Il n'intègre aucun décalage et ne peut donc pas effectuer seul une pagination au-delà de la première page.

Lors d'un entretien, on peut vous demander de convertir TOP dans la forme standard. SELECT TOP 10 avec ORDER BY équivaut à FETCH FIRST 10 ROWS ONLY.

SELECT TOP 10 name, salary
FROM employees
ORDER BY salary DESC;

TOP WITH TIES

Une fonctionnalité intéressante de SQL Server : TOP n WITH TIES renvoie des lignes supplémentaires lorsqu'elles sont ex æquo avec la dernière ligne selon la clé de ORDER BY.

Si trois personnes partagent le 10e salaire le plus élevé, TOP 10 WITH TIES les renvoie toutes, soit éventuellement 12 lignes. C'est l'équivalent de FETCH FIRST ... WITH TIES dans la norme.

SELECT TOP 10 WITH TIES name, salary
FROM employees
ORDER BY salary DESC;

ORDER BY est obligatoire pour une pagination déterministe

Le point le plus important à retenir pour un entretien : OFFSET/LIMIT sans ORDER BY déterministe est dangereux. Le moteur peut choisir des lignes différentes pour la « page 2 » de celles choisies pour la « page 1 », car l'ordre sous-jacent n'est pas défini.

Triez toujours selon un ensemble de clés unique ou suffisamment discriminant. Si votre colonne de tri contient des doublons, ajoutez la clé primaire comme critère de départage afin que les pages ne se chevauchent pas et n'ignorent aucune ligne.

SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC
LIMIT 10 OFFSET 20;

Pourquoi la pagination avec OFFSET passe mal à l'échelle

Les intervieweurs approfondissent les performances. Un OFFSET élevé oblige toujours la base de données à générer puis à éliminer toutes les lignes ignorées. OFFSET 100000 LIMIT 10 lit 100 010 lignes pour en renvoyer 10.

Le coût croît linéairement avec le numéro de page, ce qui ralentit la pagination profonde sur les grandes tables.

Pagination par clé (recherche)

L'alternative qui passe à l'échelle est la pagination par clé : au lieu d'ignorer des lignes selon un nombre, vous filtrez les lignes situées après la dernière valeur observée. Cette méthode utilise un parcours par plage d'index et reste rapide quelle que soit la profondeur.

Vous mémorisez la clé de tri de la dernière ligne de la page précédente et demandez les lignes qui la suivent. Mentionner la pagination par clé est un excellent indicateur d'expérience avancée.

SELECT id, name, created_at
FROM events
WHERE created_at < '2026-01-01 10:00:00'
ORDER BY created_at DESC
LIMIT 10;

Aide-mémoire selon le dialecte

Mémorisez ce tableau pour répondre rapidement en entretien :

  • MySQL / PostgreSQL / SQLite : LIMIT n OFFSET m
  • Standard / SQL Server 2012+ / Oracle 12c+ : OFFSET m ROWS FETCH FIRST n ROWS ONLY
  • Ancien SQL Server : SELECT TOP n (sans décalage)
  • Ancien Oracle (avant 12c) : filtrez sur ROWNUM dans une sous-requête

Vérification rapide

Choisissez la requête correcte pour la page 3 avec une taille de page de 10.

Récapitulatif

Les bases de la pagination :

  • LIMIT/OFFSET pour MySQL, PostgreSQL et SQLite ; OFFSET ... FETCH FIRST pour la norme et les versions modernes de SQL Server ; TOP pour les anciennes versions de SQL Server.
  • OFFSET = (page - 1) * page_size.
  • Associez toujours ces éléments à un ORDER BY déterministe en ajoutant un critère de départage unique.
  • Les décalages élevés sont lents ; préférez la pagination par clé pour les pages profondes.

Questions Fréquemment Posées

La leçon « LIMIT, OFFSET et FETCH FIRST » est-elle gratuite ?

Oui — le texte complet de « LIMIT, OFFSET et FETCH FIRST » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « LIMIT, OFFSET et FETCH FIRST » ?

Syntaxe de la pagination avec MySQL, Postgres et SQL Server Tu pratiques SQL Interview Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Interview Prep ?

Aucune expérience préalable n'est requise. SQL Interview Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « LIMIT, OFFSET et FETCH FIRST » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Interview Prep ?

Oui. Chaque leçon SQL Interview Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Tri sur plusieurs colonnes et positionnement des NULL
  2. LIMIT, OFFSET et FETCH FIRST
  3. Renvoyer de manière fiable les N premières lignes
  4. Trier avec des expressions et des alias
← Retour à SQL Interview Prep