Aller au contenu
Lecture (DQL)

LIMIT / OFFSET

LIMIT garde les n premières lignes du résultat trié, OFFSET en saute m avant de commencer. C'est l'outil des classements (top 3) et de la pagination d'une liste dans une application.

  • pagination
  • top
  • premiers résultats
  • FETCH FIRST
  • TOP

Syntaxe

Modèle
SELECT colonnesFROM tableORDER BY colonneLIMIT n [OFFSET m];

Exemple

Exemple concret
SELECT name, priceFROM productsORDER BY price DESCLIMIT 2 OFFSET 2;-- Jeu de données : boutique-- Page 2 d'un catalogue affiché par 2 produits, du plus cher au moins cher-- Résultat attendu :-- Enceinte Bluetooth | 79.99-- Webcam HD | 59.99

À retenir

  1. Page p de taille t : LIMIT t OFFSET (p - 1) × t. La page 3 de 10 éléments s'écrit LIMIT 10 OFFSET 20.
  2. Syntaxes concurrentes : LIMIT dans SQLite, PostgreSQL et MySQL, SELECT TOP n ou OFFSET m ROWS FETCH NEXT n ROWS ONLY dans SQL Server, FETCH FIRST n ROWS ONLY en SQL standard (accepté aussi par PostgreSQL).
  3. Piège : sans ORDER BY, LIMIT renvoie des lignes quelconques, et deux pages successives peuvent se chevaucher.
  4. Piège : LIMIT coupe arbitrairement entre deux ex æquo. Pour un vrai « top 3 » qui garde les égalités, utilisez RANK() (voir la fiche sur le classement).
  5. Sur une grande table, OFFSET 100000 oblige le moteur à lire puis jeter 100 000 lignes. Préférez la pagination par clé : WHERE id > dernier_id_vu ORDER BY id LIMIT 20.

Voir aussi