Výběr řádků: WHERE
Vaše dotazy zatím ukazovaly všechny řádky tabulky. Většinou ale chcete jen některé: hry pro malé děti, objednávky jednoho zákazníka, recenze s pěti hvězdičkami. Řádky vyberete tak, že za FROM přidáte WHERE (kde) a podmínku:
SELECT nazev, vek_od
FROM hry
WHERE vek_od = 3;| nazev | vek_od |
|---|---|
| Pixel Racer | 3 |
| Moon Farm | 3 |
| Cube Logic | 3 |
| Goal Rush | 3 |
| Turbo Karts | 3 |
| Bakery Story | 3 |
| Ice Hockey Pro | 3 |
Databáze prochází tabulku řádek po řádku a u každého podmínku ověří: je vek_od tohoto řádku 3? Pokud ano, řádek se dostane do výsledku, pokud ne, vynechá se. Výsledek proto obsahuje jen 7 her, které jsou vhodné od tří let.
= porovnává dvě hodnoty, tady hodnotu ve sloupci vek_od s číslem 3. V SQL znamená „rovná se“ jedno =, ne == jako v jiných programovacích jazycích. (SQLite rozumí i ==, jiné databáze ale ne, a tak se držte =.)
Sloupec v podmínce nemusí být mezi sloupci, které ukazujete. Tento dotaz ukáže jen název a řádek vybere podle primárního klíče, což je nejjistější způsob, jak najít jeden konkrétní řádek:
SELECT nazev
FROM hry
WHERE id = 7;| nazev |
|---|
| Star Pilots |
WHERE má v dotazu pevné místo: za FROM a před ORDER BY a LIMIT. Části dotazu jdou vždycky v tomto pořadí:
SELECT sloupce
FROM tabulka
WHERE podminka
ORDER BY sloupce
LIMIT pocet;Nutné jsou jen SELECT a FROM. Ostatní části přidáte, když je potřebujete, ale vždycky v tomto pořadí. Poslední tři části také v tomto pořadí pracují: WHERE nejdřív vybere řádky, ORDER BY seřadí ty, které zbyly, a LIMIT z nich vezme prvních pár. Dvě nejdražší hry pro malé děti:
SELECT nazev, cena
FROM hry
WHERE vek_od = 3
ORDER BY cena DESC
LIMIT 2;| nazev | cena |
|---|---|
| Goal Rush | 1299 |
| Ice Hockey Pro | 1199 |
Typická chyba: WHERE za ORDER BY. Dotaz SELECT nazev FROM hry ORDER BY nazev WHERE vek_od = 3; skončí chybou:
Error on line 1: near "WHERE": syntax errorSQLite za řazením WHERE nečekalo. Přesuňte podmínku před ORDER BY.
Jak psát:
Pokyny
Ukažte název a cenu her, které stojí přesně 799 Kč, seřazené podle názvu:
| nazev | cena |
|---|---|
| Castle Siege | 799 |
| Turbo Karts | 799 |
| Zombie Town | 799 |
Pod něj přidejte dotaz, který ukáže ID a datum každé objednávky zákazníka s ID 3 (sloupec zakaznik_id tabulky objednavky), od nejnovější:
| id | datum |
|---|---|
| 29 | 2025-12-12 |
| 17 | 2025-03-03 |
| 8 | 2024-06-18 |
| 3 | 2024-02-29 |
Začněte programovat zdarma
1/12