Accéder au contenu principal

Comment utiliser SQL OFFSET

Maîtrisez la clause SQL OFFSET. Découvrez comment utiliser ORDER BY et LIMIT pour renvoyer des valeurs en fonction de la position, avec des exemples pratiques, y compris la pagination des données pour les applications web.
Actualisé 14 nov. 2024  · 10 min de lecture

SQL OFFSET est une clause puissante utilisée pour sauter un nombre spécifié de lignes dans le résultat d'une requête. Elle est souvent combinée avec la clause LIMIT pour la pagination des données.

Ce tutoriel explique le fonctionnement de OFFSET, ses applications pratiques et les meilleures pratiques pour optimiser vos requêtes SQL. Si vous souhaitez revoir les opérations SQL avant de commencer, jetez un coup d'œil à notre aide-mémoire sur les bases de SQL.

La réponse rapide : Comment utiliser SQL OFFSET

La clause OFFSET en SQL est utilisée pour sauter un nombre spécifique de lignes avant de renvoyer les lignes de l'ensemble de résultats. Elle est souvent utilisée en combinaison avec la clause LIMIT pour paginer les résultats.

SELECT column_names
FROM table_name
ORDER BY column_name
LIMIT number_of_rows OFFSET offset_value;

Dans la requête SQL ci-dessus, le number_of_rows indique le nombre spécifique de lignes à renvoyer, tandis que le offset_value indique le nombre de lignes que la requête doit sauter avant de les renvoyer. 

Comment fonctionne OFFSET

La clause OFFSET permet d'ignorer le nombre de lignes spécifié dans l'ensemble de résultats. Utilisé avec ORDER BY, il garantit des résultats cohérents en sautant les lignes dans un ordre défini, généralement spécifié par le nom d'une colonne. Par défaut, ORDER BY renvoie la colonne spécifiée par ordre croissant.

Supposons que vous souhaitiez interroger les colonnes suivantes à partir d'un tableau employees: employee_id, first_name, last_name, phone_number, et salary. Vous souhaitez également exclure les 9 premières lignes de vos résultats. Vous utiliserez la requête SQL ci-dessous.

-- Select all columns for employees, starting from the 10th row
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9 ROWS;

Il est important de se rappeler qu'en raison des colonnes de tri non uniques, il faut veiller à éviter les enregistrements en double.

Combinaison de LIMIT et OFFSET

OFFSET est généralement utilisé avec LIMIT pour contrôler le nombre de lignes renvoyées et l'endroit où elles commencent à être renvoyées. 

Dans l'exemple ci-dessous, la clause LIMIT renvoie uniquement les 10 lignes suivantes après avoir ignoré les 9 premières lignes.

-- Select all columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9
-- Fetch the next 10 rows
LIMIT 10;

Applications pratiques de OFFSET

SQL OFFSET est largement utilisé pour la pagination dans les applications web. Pour être clair, la pagination des données est une technique permettant de diviser les données volumineuses en petits morceaux, ce qui aide les utilisateurs à naviguer efficacement dans les grands ensembles de données. 

Je considère que la pagination des données est l'un des meilleurs exemples d'utilisation de OFFSET et LIMIT. Dans cette technique, les clauses OFFSET et LIMIT utilisées conjointement décomposent les données en morceaux gérables affichés sur plusieurs pages.  

L'expérience de l'utilisateur s'en trouve améliorée, car personne n'est submergé par la vue d'une liste massive en une seule fois. 

Parmi les autres applications de OFFSET, on peut citer

  1. Sauter des enregistrements spécifiques lors de l'analyse des données.
  2. Préparation des données pour l'exportation par morceaux (en combinaison avec LIMIT).
  3. Il suffit de se concentrer sur les données d'un intervalle particulier, lorsque l'on sait ce que l'on cherche. 

Soutien spécifique à la base de données et alternatives

Différentes bases de données prennent en charge les clauses OFFSET et LIMIT, notamment MySQL, PostgreSQL et SQLite. D'autres méthodes, telles que FETCH, peuvent être utilisées pour les bases de données qui ne prennent pas en charge les instructions OFFSET et LIMIT, comme SQL Server.

Par exemple, la requête ci-dessous (utilisant LIMIT) renverrait des valeurs dans les bases de données MySQL, SQLite et PostgreSQL, mais pas dans SQL Server.

-- Select all columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9
-- Fetch the next 10 rows
LIMIT 10;

Par conséquent, vous devez utiliser FETCH dans SQL Server pour obtenir des résultats similaires à l'aide de la requête ci-dessous ;

-- Select specific columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id 
-- Skip the first 9 rows (starting from the 10th row)
OFFSET 9 ROWS 
 -- Fetch the next 10 rows
FETCH NEXT 10 ROWS ONLY;

Techniques avancées : OFFSET et FETCH

La clause FETCH, utilisée dans la norme SQL, peut être une alternative avancée à LIMIT. Alors que OFFSET spécifie le nombre de lignes à ignorer, FETCH indique le nombre de lignes à retourner à partir de la requête.

-- Selecting columns from employees table
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Ordering the result set by employee_id for consistent pagination
ORDER BY employee_id
-- Skipping the first 20 rows in the result set
OFFSET 20 ROWS
-- Fetching the next 10 rows only after the offset
FETCH NEXT 10 ROWS ONLY;

D'autres techniques SQL avancées sont présentées dans notre cours Associate Data Analyst in SQL.

Considérations sur les performances et autres bonnes pratiques 

Pour utiliser efficacement le site OFFSET, il faut comprendre son impact sur les performances des requêtes. 

OFFSET peut avoir un impact sur les performances des requêtes, en particulier pour les grands ensembles de données. SQL Server gère efficacement la mise en cache et l'exécution des requêtes, mais l'utilisation de OFFSET avec de grands ensembles de données peut nécessiter des stratégies d'optimisation supplémentaires, telles que l'utilisation de Common Table Expressions (CTE) ou de tableaux temporaires. Vous devez donc surveiller les performances des requêtes afin d'identifier les problèmes et de résoudre les goulets d'étranglement qui entravent l'exécution des requêtes. Le cours de DataCamp sur le serveur SQL intermédiaire comprend un chapitre sur les expressions de tableau courantes et d'autres tableaux avancés. 

Voici quelques bonnes pratiques supplémentaires que j'ai découvertes au cours de ma pratique.

  • Utilisez toujours une clause ORDER BY appropriée. Cette approche garantit que les enregistrements sont triés de manière cohérente.
  • Examinez les techniques d'indexation et d'optimisation des requêtes. Cette méthode permet d'optimiser les performances, en particulier lorsqu'il s'agit de grandes bases de données.

Conclusion et formation complémentaire

La maîtrise de la clause OFFSET, qui est combinée avec LIMIT, est cruciale pour une gestion efficace des données. Essayez ces clauses dans vos requêtes SQL pour améliorer les performances et l'expérience des utilisateurs. Vous pouvez en apprendre davantage sur la clause OFFSET dans SQL en suivant les cours de DataCamp sur SQL intermédiaire et les principes fondamentaux de SQL.

De même, vous pouvez en apprendre davantage sur l'analyse des données à l'aide de SQL grâce à notre cours Reporting in SQL. Par ailleurs, si vous souhaitez démontrer vos compétences pratiques dans le cadre de projets SQL, je vous recommande d'obtenir la certification SQL Associate pour vous démarquer lors des entretiens d'embauche.


Photo of Allan Ouko
Author
Allan Ouko
LinkedIn
Je crée des articles qui simplifient la science des données et l'analyse, en les rendant faciles à comprendre et accessibles.

Questions fréquemment posées

Qu'est-ce que la clause OFFSET en SQL ?

La clause OFFSET est utilisée pour sauter des lignes avant de renvoyer les résultats d'une requête.

Pourquoi utiliser ORDER BY avec OFFSET ?

Bien que notre requête s'exécute sans la clause ORDER BY, le résultat peut ne pas être cohérent ou ne pas correspondre aux attentes. L'utilisation de OFFSET sans ORDER BY signifie que le moteur de la base de données n'a pas d'ordre spécifique à suivre, ce qui conduit à des résultats potentiellement imprévisibles. Nous utilisons donc ORDER BY pour ne pas être surpris.

Pourquoi la clause LIMIT renvoie-t-elle une erreur dans SQL Server ?

La clause LIMIT est prise en charge par MySQL, PostgreSQL et SQLite. Utilisez FETCH pour SQL Server.

Quelle est la différence entre OFFSET et LIMIT ?

La clause OFFSET permet de sauter les lignes spécifiées avant de renvoyer les enregistrements, tandis que la clause LIMIT limite le nombre d'enregistrements à renvoyer.

Que se passe-t-il si l'exécution de ma requête OFFSET prend du temps ?

Vous pouvez optimiser la requête en utilisant des expressions de tableau communes (CTE) ou des tableaux temporaires.

Sujets

Apprenez SQL avec DataCamp

Certification disponible

cours

Introduction à SQL

2 hr
881.8K
Apprenez à créer et à interroger des bases de données relationnelles à l'aide de SQL en seulement deux heures.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow