Sjednocení výsledků: UNION

Spojení tabulek klade tabulky vedle sebe: sloupce jedné vedle sloupců druhé. UNION (sjednocení) klade výsledky dvou dotazů pod sebe: nejdřív řádky prvního dotazu, pak řádky druhého. Co je v obchodě nového od srpna 2025, noví zákazníci i nové hry v jednom seznamu:

SELECT registrace AS den, 'nový zákazník' AS udalost, jmeno AS podrobnosti
FROM zakaznici
WHERE registrace >= '2025-08-01'
UNION ALL
SELECT vydano, 'nová hra', nazev
FROM hry
WHERE vydano >= '2025-08-01'
ORDER BY den;
denudalostpodrobnosti
2025-08-21nový zákazníkKristýna Fialová
2025-09-26nová hraGoal Rush
2025-10-03nový zákazníkMartin Zeman
2025-11-14nová hraKnight's Oath

Oba dotazy musí mít stejný počet sloupců. Sloupce se k sobě přiřazují podle pořadí, ne podle názvu: první sloupec druhého dotazu jde pod první sloupec prvního dotazu a tak dál. Názvy sloupců se berou z prvního dotazu, takže aliasy potřebuje jen on. S jiným počtem sloupců dostanete chybu:

Error on line 1: SELECTs to the left and right of UNION do not have the same number of result columns

Zpráva říká, že dotazy nalevo a napravo od UNION nemají stejný počet sloupců. Všimněte si také sloupců 'nový zákazník' a 'nová hra': text v apostrofech dá v každém řádku stejnou hodnotu a tady říká, odkud který řádek pochází.

UNION ALL nechá všechny řádky. UNION bez ALL odstraní z výsledku opakující se řádky, stejně jako DISTINCT. Hry, které si někdo objednal nebo ohodnotil, tedy SELECT hra_id FROM polozky UNION SELECT hra_id FROM recenze, dají 17 řádků, každou hru jednou. S UNION ALL je to 67 řádků, jeden za každou položku každé objednávky a jeden za každou recenzi. Když víte, že se řádky opakovat nemůžou, nebo je chcete nechat, použijte UNION ALL: databáze nemusí opakované řádky hledat, takže je rychlejší.

ORDER BY se píše jen jednou, úplně na konec, a řadí celý výsledek; totéž platí pro LIMIT. Používá názvy sloupců prvního dotazu, tady den. ORDER BY za prvním dotazem skončí chybou ORDER BY clause should come after UNION not before.

Typická chyba: sloupce v jiném pořadí. Kdyby druhý dotaz měl SELECT nazev, 'nová hra', vydano, SQLite by si nestěžovalo: dalo by názvy her pod data bez jediného slova. Zkontrolujte, že sloupce obou dotazů znamenají totéž.

Pokyny

Ukažte, kolik her má každý žánr, jako zanr a pocet_her, a přidejte ještě jeden řádek: text Všechny žánry a počet všech her. Seřaďte podle sloupce pocet_her od nejvyššího, pak podle žánru:

zanrpocet_her
Všechny žánry20
Akční4
Adventura3
Strategie3
……

Pod to ukažte jména zákazníků, kterým by měl vedoucí zavolat: těch, kteří mají nějakou vrácenou objednávku, a těch, kteří napsali recenzi s méně než 3 hvězdičkami. Každý z nich má být v seznamu jen jednou. V prvním dotazu spojte tabulku zakaznici s tabulkou objednavky, ve druhém tabulku zakaznici s tabulkou recenze. Seřaďte podle jména:

jmeno
Adéla Králová
Matěj Němec
Tomáš Veselý

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

8/8