Řazení pomocí ORDER BY
V této lekci se naučíte řadit řádky výsledku, ukázat jen některé z nich a počítat nové sloupce. Zatím přicházely řádky v pořadí, v jakém je databáze zrovna vydala. Obchod je ale obvykle chce mít v určitém pořadí: nejlevnější hry jako první, nejnovější objednávky nahoře, zákazníky podle abecedy. K tomu slouží ORDER BY (seřadit podle). Píše se na konec dotazu, za FROM, a za ním následuje sloupec, podle kterého se má řadit:
SELECT nazev, cena
FROM hry
ORDER BY cena;| nazev | cena |
|---|---|
| Cube Logic | 129 |
| Word Quest | 249 |
| Pixel Racer | 399 |
| Ocean Deep | 399 |
| … | … |
Řádky jsou seřazené vzestupně, od nejmenší hodnoty po největší. Co je „nejmenší“, záleží na tom, co ve sloupci je:
- Čísla se řadí podle hodnoty: 129, 249, 399, 499.
- Text se řadí podle abecedy, písmeno po písmenu: Eva Novotná přijde před Filipem Benešem a Klára Horáková před Kristýnou Fialovou. SQLite přitom porovnává kódy znaků: všechna velká písmena mají menší kód než malá a písmena s háčky a čárkami větší než všechna ostatní, takže
ČaŽjsou až zaZ. Kdyby měl obchod zákazníka Čeňka, skončil by až za Vojtěchem. Řadit česky, sČhned zaC, SQLite samo neumí. - Datum je uložené jako text ve tvaru
RRRR-MM-DD: rok, měsíc a den, měsíc i den vždy dvěma číslicemi, třeba2024-03-14. Text se porovnává zleva, takže nejdřív rozhoduje rok, pak měsíc a pak den, a abecední pořadí je zároveň pořadí v čase. Právě proto databáze píšou data takhle:14. 3. 2024by se správně neseřadilo. NULLpovažuje SQLite za menší než jakoukoli hodnotu, takže řádky sNULLjsou první. (Některé jiné databáze, třeba PostgreSQL, je naopak dávají na konec.)
Bez ORDER BY není pořadí řádků zaručené. Obvykle je SQLite vydá v pořadí jejich ID, ale ne vždycky. Spusťte SELECT email FROM zakaznici; a e-maily přijdou podle abecedy. SQLite totiž má e-maily uložené ještě zvlášť v seřazeném seznamu, podle kterého hlídá, aby žádní dva zákazníci neměli stejný e-mail. (Říká se mu index a indexy poznáte na konci kurzu.) Když chcete jen e-maily, je rychlejší přečíst tenhle krátký seznam než celou tabulku. Přidejte do dotazu i jména (SELECT jmeno, email FROM zakaznici;) a řádky jsou zase v pořadí podle ID. Databáze si vždycky vybírá cestu, kterou považuje za nejrychlejší, a ta se může změnit s dotazem, s daty nebo s jinou databází. Kdykoli vám tedy na pořadí záleží, napište ORDER BY.
Typická chyba: ORDER BY na špatném místě. Části dotazu mají pevné pořadí: SELECT, pak FROM a na konci ORDER BY. Dotaz, který je má přeházené, skončí chybou:
SELECT nazev, cena
ORDER BY cena
FROM hry;Error on line 1: near "FROM": syntax errorJak psát:
Pokyny
Ukažte jméno a město každého zákazníka a seřaďte zákazníky podle jména. Výsledek začíná takto:
| jmeno | mesto |
|---|---|
| Adéla Králová | Praha |
| Anna Kučerová | NULL |
| Eva Novotná | Praha |
| … | … |
Pod něj přidejte dotaz, který ukáže název a datum vydání (vydano) každé hry, od nejstarší. Dvě hry, které ještě nevyšly, tam mají NULL, a proto jsou první:
| nazev | vydano |
|---|---|
| Robot Rebellion | NULL |
| Mystery Manor | NULL |
| Cube Logic | 2020-02-11 |
| Castle Siege | 2021-05-20 |
| … | … |
Začněte programovat zdarma
1/12