SQL - Comment limiter le nombre de ligne de résultat avec LIMIT ?

SQL - Comment limiter le nombre de ligne de résultat avec LIMIT ?

Date de sortie
July 9, 2024
Auteur
Bertrand Fabre
“J’ai écrit un traitement en SQL et je voudrai voir ce que cela donne mais sans tout afficher car j’ai des centaines de milliers de lignes en résultat. Je fais comment ?”

La pagination

Certains systèmes de gestion de bases de données font de la pagination. C’est à dire qu’il découpe le résultat en plusieurs lots appelés pages.

C’est pratique pour éviter de surcharger sa mémoire vive qui va devoir encaisser l’affichage.

L’export et le tableur

De plus, si on souhaite faire un export en csv ou en tableur (ouai bon ça m’arrive…) afin de manipuler plus simplement les données qu’en SQL, cela peut devenir volumineux.

Par exemple, cela m’arrive de faire des export BigQuery en Google Sheet pour faire des comparaisons, des filtrers, des tableaux croisés dynamique, ajouter des formules etc.

J’ai commencé dans la data avec Excel, ça laisse des traces 😅.

Mais si l’export fait plusieurs centaines de milliers de lignes, Google Sheets ne va pas aimer.

Pourtant je voudrai avoir un échantillon des données.

C’est à ce moment que peut être utile la clause LIMIT.

La clause LIMIT

La clause LIMIT est utilisée à la fin du code SQL avant le point-virgule (si vous l’utilisez) et permet de dire le nombre de lignes que l’on souhaite afficher en sortie.

WITH cte_sales AS (
    SELECT '001' AS site, "ProduitA" AS product, 1000 AS turnover UNION ALL
    SELECT '001', 'produitB', 1500  UNION ALL
    SELECT '001', 'produitC', 1200  UNION ALL
    SELECT '002', 'produitA', 800   UNION ALL
    SELECT '002', 'produitB', 950   UNION ALL
    SELECT '002', 'produitC', 1100  UNION ALL
    SELECT '003', 'produitA', 1300  UNION ALL
    SELECT '003', 'produitB', 1300  UNION ALL
    SELECT '003', 'produitC', 900   UNION ALL
    SELECT '004', 'produitA', 1600  UNION ALL
    SELECT '004', 'produitB', 1400  UNION ALL
    SELECT '004', 'produitC', 1350
)
SELECT 
    site, 
    product
FROM cte_sales
LIMIT 4; -- Seules 4 lignes seront affichées

Voici le résultat :

site
product
1
ProduitA
1
produitB
1
produitC
2
produitA

✅ Il n’y a bien que 4 lignes d’affichées en sortie.

Ces lignes correspondent au 4 premiers SELECT de la clause WITH.

La clause OFFSET

☝️ On peut aussi utiliser LIMIT avec une clause : OFFSET.

Cette clause permet de faire un décalage dans l’affichage. C’est-à-dire, on veut afficher 4 lignes mais seulement à partir de la troisième ligne.

WITH cte_sales AS (
    SELECT '001' AS site, "ProduitA" AS product, 1000 AS turnover UNION ALL
    SELECT '001', 'produitB', 1500  UNION ALL
    SELECT '001', 'produitC', 1200  UNION ALL
    SELECT '002', 'produitA', 800   UNION ALL
    SELECT '002', 'produitB', 950   UNION ALL
    SELECT '002', 'produitC', 1100  UNION ALL
    SELECT '003', 'produitA', 1300  UNION ALL
    SELECT '003', 'produitB', 1300  UNION ALL
    SELECT '003', 'produitC', 900   UNION ALL
    SELECT '004', 'produitA', 1600  UNION ALL
    SELECT '004', 'produitB', 1400  UNION ALL
    SELECT '004', 'produitC', 1350
)
SELECT 
    site, 
    product
FROM cte_sales
LIMIT 4 OFFSET 3; -- Après la troisième ligne, affiche 4 lignes.

Voici le résultat :

site
product
2
produitA
2
produitB
2
produitC
3
produitA

On voit que la première des 4 lignes affichées, correspond à la ligne juste après la 3ème.

⚠️
LIMIT ne filtre pas les données. La volumétrie traitée et potentiellement facturée restera la même.

Merci de votre lecture !