Wie man die n-te Zeile
in einer SQL-Datenbanktabelle auswählt
Bei der Arbeit mit Daten in einer Datenbank kann es erforderlich sein, ein bestimmtes Element auszuwählen, wie zum Beispiel die n-te Zeile
in einer Tabelle. Verschiedene Datenbanken haben jedoch leicht unterschiedliche Ansätze, um dies zu erreichen, und zu lernen, wie man dies in mehreren SQL-Systemen umsetzt, kann äußerst nützlich sein. In diesem Blogbeitrag werden sowohl Datenbank-unabhängige Ansätze als auch spezifische Lösungen für beliebte SQL-Datenbanken wie SQL Server, MySQL, PostgreSQL, SQLite und Oracle untersucht.
Datenbank-unabhängiger Ansatz
Bevor wir in die Einzelheiten jeder Datenbank eintauchen, beginnen wir mit einer Methode, die als universeller angesehen werden kann. Während einige Funktionen möglicherweise nicht in allen SQL-Plattformen unterstützt werden, gibt es übergreifende Strategien, die die Auswahl der n-ten Zeile
vereinfachen.
Verwendung von LIMIT und OFFSET (PostgreSQL & MySQL)
Für Datenbanken wie PostgreSQL und MySQL können Sie die folgende SQL-Syntax verwenden:
SELECT ... LIMIT y OFFSET x
- LIMIT gibt an, wie viele Zeilen Sie abrufen möchten.
- OFFSET gibt an, ab welchem Punkt Sie mit dem Abrufen der Zeilen beginnen möchten.
Um beispielsweise die 10. Zeile auszuwählen, würden Sie Folgendes tun:
SELECT * FROM tablename LIMIT 1 OFFSET 9;
Diese Syntax ist nützlich, um Daten zu paginieren oder, wie in unserem Fall, eine bestimmte Zeile abzurufen.
Spezifische Datenbanklösungen
SQL Server
Mit SQL Server, insbesondere Versionen vor SQL Server 2012, können Sie Fensterfunktionen verwenden, um ähnliche Ergebnisse zu erzielen. Hier ein gängiges Beispiel:
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders
)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000;
- ROW_NUMBER() erzeugt eine fortlaufende Nummer für Zeilen im Ergebnis basierend auf der angegebenen Reihenfolge.
- Passen Sie
WHERE RowNumber = 1000000
an, um die gewünschte Zeile auszuwählen.
PostgreSQL und SQLite (Version 3.25.0+)
Seit PostgreSQL 8.4 werden die Standardfensterfunktionen unterstützt, die es Ihnen ermöglichen, einen ähnlichen Ansatz wie in SQL Server zu verwenden:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
FROM tablename
) AS foo
WHERE rownumber <= n;
- Ersetzen Sie
n
durch die gewünschte Zeilennummer. Diese Struktur funktioniert auch in SQLite ab Version 3.25.0 effektiv.
Oracle und DB2
Für Oracle und DB2 unterstützen auch sie Fensterfunktionen. Die Syntax ist ähnlich der von PostgreSQL:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
FROM tablename
) AS foo
WHERE rownumber <= n;
Die Verwendung von ROW_NUMBER()
stellt sicher, dass Sie spezifische Zeilen basierend auf der von Ihnen definierten Reihenfolge abrufen können.
Fazit
Das Auswählen der n-ten Zeile
aus einer SQL-Datenbank ist eine gängige Aufgabe, die je nach verwendeter Datenbank auf verschiedene Weisen angegangen werden kann. Das Verständnis der verschiedenen Syntaxen und Methoden ermöglicht es Ihnen, effektiver über verschiedene Systeme hinweg zu arbeiten. Ob Sie in SQL Server, MySQL, PostgreSQL, SQLite oder Oracle abfragen, Sie haben nun die notwendigen Werkzeuge, um die genauen Zeilen abzurufen, die Sie benötigen.
Für weitere Lektüre können Sie jederzeit detailliertere Informationen zu SQL-Abfragetechniken auf der Website von Troels Arvin nachlesen. Viel Spaß beim Abfragen!