Prvních pár řádků: LIMIT
Často nechcete všechny řádky, jen několik prvních: tři nejnovější objednávky, pět nejlevnějších her. LIMIT (omezení) na úplném konci dotazu říká, kolik řádků nejvýš ukázat:
SELECT id, datum
FROM objednavky
ORDER BY datum DESC
LIMIT 3;| id | datum |
|---|---|
| 30 | 2025-12-22 |
| 29 | 2025-12-12 |
| 28 | 2025-11-28 |
ORDER BY řádky seřadí a LIMIT nechá první tři. Spolu odpovídají na otázky typu „prvních N“: nejdražší, nejnovější, nejlépe hodnocené. Pokud je řádků méně, než kolik limit dovoluje, dostanete prostě všechny.
LIMIT bez ORDER BY je loterie. SELECT nazev FROM hry LIMIT 3; ukáže tři hry, ale které, to zaručené není: bez ORDER BY přicházejí řádky v libovolném pořadí, jak už víte. To nevadí, když se chcete jen rychle podívat do velké tabulky, ale vadí to vždycky, když se otázka ptá na první, nejlepší nebo poslední.
Pozor na stejné hodnoty na hranici. Tři nejlevnější hry? Cube Logic za 129 Kč, Word Quest za 249 Kč a pak tři hry za 399 Kč. S ORDER BY cena LIMIT 3 je na databázi, která z nich dostane třetí místo. Rozhodne druhý sloupec řazení:
SELECT nazev, cena
FROM hry
ORDER BY cena, nazev
LIMIT 3;| nazev | cena |
|---|---|
| Cube Logic | 129 |
| Word Quest | 249 |
| Bakery Story | 399 |
LIMIT funguje v SQLite, PostgreSQL i MySQL. Některé jiné databáze ho píšou jinak, třeba SELECT TOP 3 … v SQL Serveru nebo FETCH FIRST 3 ROWS ONLY na konci v Oraclu, ale myšlenka je stejná.
Typická chyba: LIMIT před ORDER BY. LIMIT je vždycky poslední částí dotazu, takže … LIMIT 3 ORDER BY cena; skončí chybou near "ORDER": syntax error.
Jak psát:
Pokyny
Ukažte název a cenu tří nejdražších her, nejdražší jako první. Výsledek má jen tyto tři řádky:
| nazev | cena |
|---|---|
| Knight's Oath | 1599 |
| Goal Rush | 1299 |
| Ice Hockey Pro | 1199 |
Pod tím ukažte název a věkovou hranici (vek_od) tří her pro nejstarší hráče: nejvyšší věková hranice jako první a hry se stejnou hranicí podle abecedy:
| nazev | vek_od |
|---|---|
| Zombie Town | 18 |
| Dragon Forge | 16 |
| Knight's Oath | 16 |
Začněte programovat zdarma
5/12