Ř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;
nazevcena
Cube Logic129
Word Quest249
Pixel Racer399
Ocean Deep399
……

Řá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ž za Z. Kdyby měl obchod zákazníka Čeňka, skončil by až za Vojtěchem. Řadit česky, s Č hned za C, 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řeba 2024-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. 2024 by se správně neseřadilo.
  • NULL považuje SQLite za menší než jakoukoli hodnotu, takže řádky s NULL jsou 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 error

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:

jmenomesto
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í:

nazevvydano
Robot RebellionNULL
Mystery ManorNULL
Cube Logic2020-02-11
Castle Siege2021-05-20
……

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

1/12