Limit (SQL): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
(MSSQL)
(DB2)
Zeile 34: Zeile 34:
 
[[DB2]] hat für die die Begrenzung der Ergebnisse die Anweisung ''FETCH FIRST X ROWS ONLY''.
 
[[DB2]] hat für die die Begrenzung der Ergebnisse die Anweisung ''FETCH FIRST X ROWS ONLY''.
  
<code=sql>SELECT * FROM table FETCH FIRST 10 ROWS ONLY;</code=sql>
+
<code=sql>SELECT * FROM testtable FETCH FIRST 10 ROWS ONLY;</code=sql>
  
  

Version vom 18. November 2009, 05:38 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.

MySQL

Unter MySQL gibt es für diesen Fall die Anweisung LIMIT, diese hat zwei Parameter, wobei der letzte optional ist. <code=sql>SELECT * from testtable WHERE id = 1 LIMIT 1</code=sql> 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.

<code=sql>SELECT * FROM testtable WHERE id >1 ORDER BY id LIMIT 10,30</code=sql> 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.

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. <code=sql>SELECT * from testtable WHERE id = 1 LIMIT 1</code=sql> 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.

<code=sql>SELECT * FROM testtable WHERE id >1 ORDER BY id LIMIT 10 OFFSET 30</code=sql> 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. <code=sql>SELECT * from testtable WHERE id = 1 AND rownum = 1</code=sql> 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.

<code=sql>SELECT * FROM testtable WHERE id > 1 AND rownum BETWEEN 30 AND 40 ORDER BY id </code=sql> Diese Abfrage wählt die Elemente 30-40 aus, ähnlich der LIMIT 10,30 Abfrage aus MySQL.

MSSQL

MSSQL besitzt die Anweisung TOP für die Begrenzung der Ergebnise. Unter SQL CE existiert die Funktion nicht, es gibt auch keine Alternative. <code=sql>SELECT TOP 10 * FROM testtable WHERE id = 1</code=sql>

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.

<code=sql>SELECT * FROM testtable FETCH FIRST 10 ROWS ONLY;</code=sql>