Náhrada NULL: COALESCE

Víte, že NULL znamená žádnou hodnotu. Z toho plyne něco, na co se snadno zapomíná: výpočet s NULL dá NULL. Pět plus něco neznámého je neznámé a text spojený s ničím také. V tomto seznamu zákazníků je to problém, protože město Anny Kučerové je NULL:

SELECT jmeno, 'Město: ' || mesto AS info
FROM zakaznici
WHERE id BETWEEN 4 AND 6;
jmenoinfo
Lukáš ProcházkaMěsto: Ostrava
Anna KučerováNULL
Tomáš VeselýMěsto: Brno

Nezmizelo jen město, ale celý text: ve sloupci info má Anna Kučerová NULL. Stejně to dopadne s +, -, * a / a většina funkcí dá pro NULL zase NULL, jak jste viděli u LENGTH.

Napraví to funkce COALESCE. Vezme libovolný počet argumentů a vrátí první z nich, který není NULL. COALESCE(mesto, 'neznámé') je tedy město, když ho zákazník má, a text 'neznámé', když ne:

SELECT jmeno, 'Město: ' || COALESCE(mesto, 'neznámé') AS info
FROM zakaznici
WHERE id BETWEEN 4 AND 6;
jmenoinfo
Lukáš ProcházkaMěsto: Ostrava
Anna KučerováMěsto: neznámé
Tomáš VeselýMěsto: Brno

S více argumenty je COALESCE zkouší jeden po druhém: COALESCE(a, b, 'nic') je a, pokud má a hodnotu, jinak b, pokud ji má b, a jinak 'nic'.

SQLite má také IFNULL(x, y), které dělá totéž s právě dvěma argumenty. COALESCE patří do standardního SQL a funguje ve všech databázích, proto ho používá i tento kurz. Totéž byste mohli napsat i pomocí CASE WHEN mesto IS NULL THEN … ELSE mesto END, ale COALESCE je mnohem kratší.

Nahrazujte NULL jen v tom, co dotaz ukazuje. V tabulce říká NULL něco pravdivého, totiž že obchod město nezná, a vymyšlená hodnota by to zakryla. A dejte pozor, aby náhrada dávala smysl: chybějící číslo není vždycky 0.

Typická chyba: text náhrady bez apostrofů. COALESCE(mesto, nezname) hledá sloupec nezname a skončí chybou no such column: nezname. Text patří vždycky do apostrofů: COALESCE(mesto, 'neznámé').

Pokyny

Ukažte název každé hry a datum jejího vydání jako datum_vydani; u her, které ještě nevyšly, místo něj napište připravujeme. Hry seřaďte podle sloupce vydano a pak podle názvu, aby byly ty nevydané na začátku:

nazevdatum_vydani
Mystery Manorpřipravujeme
Robot Rebellionpřipravujeme
Cube Logic2020-02-11
……

Pod tím ukažte každou recenzi hry Dragon Forge (hra_id 1) jako jeden řádek textu, shrnuti: hvězdičky, /5: a komentář, třeba 4/5: Skvělý příběh, jen trochu dlouhý. U recenze bez komentáře napište místo něj (bez komentáře). Recenze seřaďte podle zakaznik_id:

shrnuti
4/5: Skvělý příběh, jen trochu dlouhý.
5/5: Nejlepší RPG, jaké jsem za poslední roky hrál!
3/5: Na začátku moc těžké.
5/5: (bez komentáře)

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

6/10