Comment sélectionner la nième ligne dans une table de base de données SQL

Lorsque vous travaillez avec des données dans une base de données, il se peut que vous ayez besoin de sélectionner un élément spécifique, tel que la nième ligne dans une table. Cependant, les différentes bases de données ont des approches légèrement variées pour y parvenir, et apprendre à le faire à travers plusieurs systèmes SQL peut être incroyablement utile. Dans cet article de blog, nous explorerons à la fois les approches indépendantes de la base de données ainsi que des solutions spécifiques pour des bases de données SQL populaires telles que SQL Server, MySQL, PostgreSQL, SQLite, et Oracle.

Approche indépendante de la base de données

Avant de plonger dans les spécificités de chaque base de données, commençons par une méthode qui peut être considérée comme plus universelle. Bien que certaines fonctionnalités ne soient pas prises en charge sur toutes les plateformes SQL, il existe des stratégies générales qui simplifient la sélection de la nième ligne.

Utilisation de LIMIT et OFFSET (PostgreSQL & MySQL)

Pour les bases de données comme PostgreSQL et MySQL, vous pouvez utiliser la syntaxe SQL suivante :

SELECT ... LIMIT y OFFSET x
  • LIMIT précise combien de lignes vous souhaitez récupérer.
  • OFFSET précise à partir de quel point vous souhaitez commencer à récupérer des lignes.

Ainsi, par exemple, pour sélectionner la 10ème ligne, vous feriez :

SELECT * FROM nom_de_table LIMIT 1 OFFSET 9;

Cette syntaxe est pratique pour paginer des données ou, comme dans notre cas, récupérer une ligne spécifique.

Solutions spécifiques aux bases de données

SQL Server

Avec SQL Server, en particulier les versions antérieures à SQL Server 2012, vous pouvez utiliser des fonctions de fenêtre pour obtenir des résultats similaires. Voici comment, en utilisant un exemple commun :

WITH Ordered AS (
    SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
    FROM Orders
)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000;
  • ROW_NUMBER() génère un numéro séquentiel pour les lignes dans le jeu de résultats basé sur l’ordre spécifié.
  • Ajustez WHERE RowNumber = 1000000 pour spécifier quelle ligne récupérer.

PostgreSQL et SQLite (Version 3.25.0+)

Depuis PostgreSQL 8.4, les fonctions de fenêtre standard sont prises en charge, ce qui vous permet d’utiliser une approche similaire à celle de SQL Server :

SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, colonnes
    FROM nom_de_table
) AS foo
WHERE rownumber <= n;
  • Remplacez n par le numéro de ligne souhaité. Cette structure fonctionnera toujours efficacement dans SQLite à partir de la version 3.25.0.

Oracle et DB2

Pour Oracle et DB2, ils prennent également en charge les fonctions de fenêtre. La syntaxe est similaire à celle de PostgreSQL :

SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, colonnes
    FROM nom_de_table
) AS foo
WHERE rownumber <= n;

L’utilisation de ROW_NUMBER() vous assure de pouvoir accéder à des lignes spécifiques en fonction de l’ordre que vous définissez.

Conclusion

Sélectionner la nième ligne d’une base de données SQL est une tâche courante qui peut être abordée de différentes manières selon la base de données utilisée. Comprendre les différentes syntaxes et méthodes vous permet de travailler plus efficacement à travers différents systèmes. Que vous interrogez dans SQL Server, MySQL, PostgreSQL, SQLite, ou Oracle, vous avez maintenant les outils nécessaires pour récupérer les lignes exactes dont vous avez besoin.

Pour une lecture complémentaire, vous pouvez toujours consulter des détails plus complexes sur les techniques de requête SQL sur le site de Troels Arvin. Bonne requête !