Unterschied zwischen Top- und Limit-Schlüsselwort in SQL

73

Eine kurze Frage. Angenommen, ich habe die folgenden zwei Fragen:

SELECT TOP 2 * FROM Persons;

und

SELECT * FROM Persons limit 2;

Ich möchte den Unterschied zwischen der Ausführung der obigen 2 Abfragen wissen. Grundsätzlich möchte ich wissen, wann ich das limitSchlüsselwort verwenden soll und wann es angemessen ist, das topSchlüsselwort zu verwenden. Wie gibt die Datenbank Ergebnisse basierend auf den obigen 2 Abfragen zurück?

Reggie
quelle
4
AFAIK gibt es keinen wirklichen Unterschied. TOP ist die SQL Server-Syntax und das Limit ist die MySQL-Syntax. Unterschiedliches DBMS, aber der gleiche Zweck.
Lieven Keersmaekers

Antworten:

73

Wenn Sie SQL Server verwenden, verwenden TOPSie, wenn Sie verwenden MySQLoder Postgresverwenden Limit!

AFAIK Es gibt derzeit kein Produkt, das beide unterstützt. Hier ist eine Liste der aktuellen Implementierungen und hier eine andere (deckt mehr Produkte ab, aber weniger detailliert).

Martin Smith
quelle
1
AWS Redshift auch. Wählen Sie die Top 10 * aus ...;
Wählen
Snowflake unterstützt beide
Alex
1
Die meisten, wenn nicht alle der oben genannten existierten 2011 nicht
Martin Smith
36

Wie in meinem Kommentar zu Martin Smiths Antwort oben angegeben, gibt es Produkte, die sowohl LIMITund TOPals auch unterstützen (wie Sie hier sehen können ). Der Unterschied besteht darin, dass TOPnur die ersten n Datensätze ausgewählt werden, LIMITdie Definition eines Versatzes jedoch das Abrufen eines bestimmten Datensatzbereichs ermöglicht:

SELECT * FROM ... LIMIT 5 OFFSET 10

Diese Anweisung wählt die ersten 5 Datensätze aus, nachdem 10 Datensätze übersprungen wurden. Dies ist mit nicht möglich TOP.

Das Beispiel, das ich gepostet habe, wird nur mit dem oben verlinkten DBS verglichen. Ich habe aus Zeitgründen keinen SQL-Standard überprüft.

rene
quelle
"Diese Anweisung wählt die ersten 5 Datensätze aus, nachdem 10 Datensätze übersprungen wurden. Dies ist mit TOP nicht möglich." - Gibt es eine Möglichkeit, Top auf die gleiche Weise zu verwenden
?
@RalphDingus mit verschachteltem TOP, wenn Sie ein Produkt / eine Version verwenden, die OFFSET nicht unterstützt ... FETCH oder ähnliches
Martin Smith
13

limitfunktioniert unter MySQL und PostgreSQL, topfunktioniert unter SQL Server, rownumfunktioniert unter Oracle.

Andomar
quelle
5

Es gibt keinen Unterschied. Die Schlüsselwörter TOPund LIMITfunktionieren identisch und geben dasselbe zurück.

Feuerritter
quelle
-7

Ein großer Fehler ist, dass LIMIT langsam ist, weil select voll ist und der Datenbankserver nur begrenzte Daten zurückgibt. Wenn es möglich ist, an TOP gewöhnt.

Talpa
quelle
3
Dies trifft sicherlich nicht auf postgresql zu - das die TOP-Syntax sowieso nicht unterstützt -, führen Sie ein SELECT mit einem LIMIT durch. Solange keine ORDER BY-Klausel vorhanden ist, erhalten Sie einen Exit, sobald die Abfrage logisch abgeschlossen werden kann diese Grenze.
Transaktion Charlie