LIMIT

LIMIT je syntaktická konstrukce příkazu SQL pro omezení počtu řádků vrácených příkazem SELECT.

SELECT... LIMIT [offset,]počet_řádků

Většina databázových strojů na místě počtu řádků a offsetu nedovoluje mít sloupce, ale jen číselné literály popř. lokální proměnné v uložených procedurách.

Příklady použití

Tabulky mohou obsahovat veliké množství (v některých případech až desítky milionů) řádků. Chceme-li vypsat jen omezené množství řádků, použijeme v příkazu klauzuli LIMIT s jedním parametrem.

SELECT * FROM zamestnanci LIMIT 100

Vypíše nejvýše prvních 100 řádků z tabulky zamestnanci. Je-li v tabulce méně záznamů než tento limit, výpis skončí po vypsání celé tabulky.

SELECT * FROM zamestnanci ORDER BY plat DESC LIMIT 3

Vypíše tři zaměstnance s nejvyšším platem, seřazené podle něj vzestupně.

Klausule LIMIT se dá taktéž použít pro určení tzv. offsetu

SELECT * FROM zamestnanci ORDER BY plat DESC LIMIT 9,1

Vypíše zaměstnance s 10. nejvyšším platem. Jsou-li za klíčovým slovem LIMIT uvedena dvě čísla, pak je limitem druhé číslo v pořadí. První je pak offset, který určuje, kolikátý řádek se má z výsledku vráceném příkazem SELECT, vzít a počítá se od nuly (tedy 0=první, 1=druhý, …). Použití offsetu má většinou význam u výsledků příkazů SELECT, které jsou podle něčeho řazeny.

LIMIT lze použít i s příkazem UPDATE.

UPDATE soutezici SET postupuji_do_finale=0;
UPDATE soutezici SET postupuji_do_finale=1 ORDER BY RAND() LIMIT 10;

Pokud má tabulka soutezici sloupeček postupuji_do_finale, pak první výše uvedený příkaz tento sloupeček u všech vynuluje a druhý příkaz jej nastaví pro 10 náhodně vybraných – nahodilost zajistí ORDER BY RAND().

Podpora

Klauzule LIMIT je v rámci standardu SQL'92. Podporují ji databáze jako např. MySQL, ProgreSQL, SQLite.

Microsoft Access má pro vrácení omezeného počtu řádků klauzuli TOP s použitím:

SELECT TOP počet_záznamů ... FROM tabulka.

V tomto případě ale nemá možnost určení offsetu, takže pro to potřebuje de facto dva příkazy, složené do sebe. Místo počtu záznamů může za TOP být v některých databázích procento z celkového počtu záznamů.

Databáze Oracle taktéž nepodporují klauzuli LIMIT, ale mají jiný (možná ještě lepší) prostředek, jak určit, které řádky se mají z dotazu vrátit, a to přes podporu prvku ROWNUM, které supluje pořadí vracených řádků. Výše uvedený příklad se zaměstnancem s 10. nejvyšším plateb by tak byl v Oracle proveden příkazem:

SELECT * FROM zamestnanci WHERE ROWNUM=10 ORDER BY plat DESC

Související články