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í
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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