Limit (SQL): Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: Um Abfragen zu beschleunigen kann man eine maximale Anzahl an Ergebnissen festlegen, somit hört das DBMS nach X Werten auf nach weiteren zu suchen. ==MySQL== Unte...) |
K |
||
(6 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
==MySQL== | ==MySQL== | ||
Unter [[MySQL]] gibt es für diesen Fall die Anweisung ''LIMIT'', diese hat zwei Parameter, wobei der letzte optional ist. | Unter [[MySQL]] gibt es für diesen Fall die Anweisung ''LIMIT'', diese hat zwei Parameter, wobei der letzte optional ist. | ||
− | < | + | <syntaxhighlight lang="sql">SELECT * from testtable WHERE id = 1 LIMIT 1</syntaxhighlight> |
Diese Abfrage wählt nur ein Element aus, auch wenn es mehrere Elemente mit der ID 1 geben würde, außerdem wird direkt nach der 1. Abfrage aufgehört nach weiteren zu suchen. | Diese Abfrage wählt nur ein Element aus, auch wenn es mehrere Elemente mit der ID 1 geben würde, außerdem wird direkt nach der 1. Abfrage aufgehört nach weiteren zu suchen. | ||
− | < | + | <syntaxhighlight lang="sql">SELECT * FROM testtable WHERE id >1 ORDER BY id LIMIT 10,30</syntaxhighlight> |
− | Diese Abfrage wählt | + | Diese Abfrage wählt 30 Elemente aus, jedoch werden diese nicht vom Anfang genommen, sondern erst ab dem 10. Element: Der erste Parameter von ''LIMIT'' beschreibt dabei den offset der Zeilen, und der zweite Parameter die maximale Anzahl der Zeilen. Dies bedeutet wenn die id von 1-100 eindeutig durchnummeriert ist, werden die Elemente 11-40 ausgegeben. |
==PostgreSQL== | ==PostgreSQL== | ||
Unter [[PostgreSQL]] gibt es ähnlich wie bei [[MySQL]] die Anweisung ''LIMIT'', auch mit den beiden Parametern, jedoch wird der zweite Parameter mit dem [[Schlüsselwort]] ''OFFSET'' eingetragen. | Unter [[PostgreSQL]] gibt es ähnlich wie bei [[MySQL]] die Anweisung ''LIMIT'', auch mit den beiden Parametern, jedoch wird der zweite Parameter mit dem [[Schlüsselwort]] ''OFFSET'' eingetragen. | ||
− | < | + | <syntaxhighlight lang="sql">SELECT * from testtable WHERE id = 1 LIMIT 1</syntaxhighlight> |
Diese Abfrage wählt nur ein Element aus, auch wenn es mehrere Elemente mit der ID 1 geben würde, außerdem wird direkt nach der 1. Abfrage aufgehört nach weiteren zu suchen. | Diese Abfrage wählt nur ein Element aus, auch wenn es mehrere Elemente mit der ID 1 geben würde, außerdem wird direkt nach der 1. Abfrage aufgehört nach weiteren zu suchen. | ||
− | < | + | <syntaxhighlight lang="sql">SELECT * FROM testtable WHERE id >1 ORDER BY id LIMIT 10 OFFSET 30</syntaxhighlight> |
Diese Abfrage wählt 10 Elemente aus, jedoch werden diese nicht vom Anfang genommen, sondern erst ab dem 30.Element. Dies bedeutet wenn die id von 1-100 eindeutig durchnummeriert ist, werden die Elemente 30-40 ausgegeben. | Diese Abfrage wählt 10 Elemente aus, jedoch werden diese nicht vom Anfang genommen, sondern erst ab dem 30.Element. Dies bedeutet wenn die id von 1-100 eindeutig durchnummeriert ist, werden die Elemente 30-40 ausgegeben. | ||
==Oracle== | ==Oracle== | ||
Unter [[Oracle]] gibt es für diese Art der Anweisungen eine weitere Spalte, diese heißt ''ROWNUM''. Sie enthält die Zeilennummer, so dass man mit dieser wie mit jeder anderen Spalte arbeiten kann. | Unter [[Oracle]] gibt es für diese Art der Anweisungen eine weitere Spalte, diese heißt ''ROWNUM''. Sie enthält die Zeilennummer, so dass man mit dieser wie mit jeder anderen Spalte arbeiten kann. | ||
− | < | + | <syntaxhighlight lang="sql">SELECT * from testtable WHERE id = 1 AND rownum = 1</syntaxhighlight> |
Diese Abfrage wählt nur ein Element aus, auch wenn es mehrere Elemente mit der ID 1 geben würde, außerdem wird direkt nach der 1. Abfrage aufgehört nach weiteren zu suchen. | Diese Abfrage wählt nur ein Element aus, auch wenn es mehrere Elemente mit der ID 1 geben würde, außerdem wird direkt nach der 1. Abfrage aufgehört nach weiteren zu suchen. | ||
− | + | ||
− | + | Eine Abfrage auf ''rownum > 1'' ist nicht möglich, da die rownum erzeugt wird nachdem der Query Optimizer die WHERE Klausel ausgwertet hat. Siehe http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html | |
==MSSQL== | ==MSSQL== | ||
− | [[MSSQL]] besitzt die Anweisung ''TOP'' für die Begrenzung der Ergebnise. | + | [[MSSQL]] besitzt die Anweisung ''TOP'' für die Begrenzung der Ergebnise. Unter SQL CE existiert die Funktion nicht, es gibt auch keine Alternative. |
− | < | + | <syntaxhighlight lang="sql">SELECT TOP 10 * FROM testtable WHERE id = 1</syntaxhighlight> |
Einen Offset oder ähnliches wird von MSSQL nicht unterstützt oder angeboten. | Einen Offset oder ähnliches wird von MSSQL nicht unterstützt oder angeboten. | ||
+ | |||
+ | ==DB2== | ||
+ | [[DB2]] hat für die die Begrenzung der Ergebnisse die Anweisung ''FETCH FIRST X ROWS ONLY''. | ||
+ | |||
+ | <syntaxhighlight lang="sql">SELECT * FROM testtable FETCH FIRST 10 ROWS ONLY;</syntaxhighlight> | ||
Aktuelle Version vom 2. April 2018, 14:42 Uhr
Um Abfragen zu beschleunigen kann man eine maximale Anzahl an Ergebnissen festlegen, somit hört das DBMS nach X Werten auf nach weiteren zu suchen.
Inhaltsverzeichnis
MySQL
Unter MySQL gibt es für diesen Fall die Anweisung LIMIT, diese hat zwei Parameter, wobei der letzte optional ist.
SELECT * from testtable WHERE id = 1 LIMIT 1
Diese Abfrage wählt nur ein Element aus, auch wenn es mehrere Elemente mit der ID 1 geben würde, außerdem wird direkt nach der 1. Abfrage aufgehört nach weiteren zu suchen.
SELECT * FROM testtable WHERE id >1 ORDER BY id LIMIT 10,30
Diese Abfrage wählt 30 Elemente aus, jedoch werden diese nicht vom Anfang genommen, sondern erst ab dem 10. Element: Der erste Parameter von LIMIT beschreibt dabei den offset der Zeilen, und der zweite Parameter die maximale Anzahl der Zeilen. Dies bedeutet wenn die id von 1-100 eindeutig durchnummeriert ist, werden die Elemente 11-40 ausgegeben.
PostgreSQL
Unter PostgreSQL gibt es ähnlich wie bei MySQL die Anweisung LIMIT, auch mit den beiden Parametern, jedoch wird der zweite Parameter mit dem Schlüsselwort OFFSET eingetragen.
SELECT * from testtable WHERE id = 1 LIMIT 1
Diese Abfrage wählt nur ein Element aus, auch wenn es mehrere Elemente mit der ID 1 geben würde, außerdem wird direkt nach der 1. Abfrage aufgehört nach weiteren zu suchen.
SELECT * FROM testtable WHERE id >1 ORDER BY id LIMIT 10 OFFSET 30
Diese Abfrage wählt 10 Elemente aus, jedoch werden diese nicht vom Anfang genommen, sondern erst ab dem 30.Element. Dies bedeutet wenn die id von 1-100 eindeutig durchnummeriert ist, werden die Elemente 30-40 ausgegeben.
Oracle
Unter Oracle gibt es für diese Art der Anweisungen eine weitere Spalte, diese heißt ROWNUM. Sie enthält die Zeilennummer, so dass man mit dieser wie mit jeder anderen Spalte arbeiten kann.
SELECT * from testtable WHERE id = 1 AND rownum = 1
Diese Abfrage wählt nur ein Element aus, auch wenn es mehrere Elemente mit der ID 1 geben würde, außerdem wird direkt nach der 1. Abfrage aufgehört nach weiteren zu suchen.
Eine Abfrage auf rownum > 1 ist nicht möglich, da die rownum erzeugt wird nachdem der Query Optimizer die WHERE Klausel ausgwertet hat. Siehe http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html
MSSQL
MSSQL besitzt die Anweisung TOP für die Begrenzung der Ergebnise. Unter SQL CE existiert die Funktion nicht, es gibt auch keine Alternative.
SELECT TOP 10 * FROM testtable WHERE id = 1
Einen Offset oder ähnliches wird von MSSQL nicht unterstützt oder angeboten.
DB2
DB2 hat für die die Begrenzung der Ergebnisse die Anweisung FETCH FIRST X ROWS ONLY.
SELECT * FROM testtable FETCH FIRST 10 ROWS ONLY;