Spojení tří tabulek

Na některé otázky dvě tabulky nestačí. Které hry byly ve které objednávce a kdy byla zadaná? Názvy jsou v tabulce hry, data v tabulce objednavky a spojuje je tabulka polozky: každý její řádek má objednavka_id a hra_id. Tabulku polozky tedy spojíte s oběma:

SELECT o.id, o.datum, h.nazev, p.pocet
FROM polozky AS p
JOIN objednavky AS o ON p.objednavka_id = o.id
JOIN hry AS h ON p.hra_id = h.id
ORDER BY o.id, h.nazev;
iddatumnazevpocet
12024-01-20Cube Logic1
12024-01-20Moon Farm1
22024-02-14Galaxy Trader1
32024-02-29Ocean Deep1
…………

Každý JOIN přidá jednu tabulku a má své vlastní ON. Můžete si představit, že databáze postupuje krok za krokem: první JOIN spáruje každou položku s její objednávkou, takže vzniknou řádky se sloupci obou tabulek; druhý JOIN pak ke každému z těchto řádků přidá jeho hru. Nakonec je každý řádek výsledku jedna položka se sloupci všech tří tabulek.

Tabulka polozky stojí uprostřed a spojuje ty dvě další: objednávka může obsahovat mnoho her a hra může být v mnoha objednávkách. To je vztah M:N (mnoho k mnoha) a databáze ho ukládá do tabulky mezi oběma, takzvané spojovací tabulky, jako je právě polozky. Tabulka recenze je stejného druhu: spojuje hry se zákazníky, kteří je hodnotili.

A můžete pokračovat. Každá objednávka má zakaznik_id, takže čtvrtou tabulku, zákazníky, připojíte k objednávkám dalším řádkem:

JOIN zakaznici AS z ON o.zakaznik_id = z.id

Jeho ON používá o, tabulku, která už v dotazu je. Podmínky najdete tak, že budete sledovat cizí klíče, stejně jako v první lekci ručně: polozky.objednavka_id → objednavky.id, objednavky.zakaznik_id → zakaznici.id, polozky.hra_id → hry.id. Každý klíč, po kterém půjdete, je jeden JOIN, a nejpřehlednější je psát JOINy v pořadí, v jakém klíče sledujete.

Typická chyba: sloupec tabulky, která v dotazu není. Když v SELECT napíšete z.jmeno, ale zapomenete připojit tabulku zakaznici, dostanete chybu no such column: z.jmeno. Alias existuje, až když je tabulka připojená.

Pokyny

Ukažte, kdo hodnotil kterou hru: spojte tabulku recenze s tabulkami hry a zakaznici a ukažte nazev hry, jmeno zákazníka a hvezdicky. Řádky seřaďte podle nazev, potom podle jmeno:

nazevjmenohvezdicky
Bakery StoryKlára Horáková4
Cube LogicEva Novotná3
Cube LogicTereza Svobodová5
Dragon ForgeAnna Kučerová3
………

Pod něj napište dotaz, který ukáže, co si který zákazník koupil, ze čtyř tabulek: jmeno zákazníka, datum objednávky (datum) a nazev hry. Řádky seřaďte podle jmeno, potom podle datum a potom podle nazev:

jmenodatumnazev
Adéla Králová2025-02-14Star Pilots
Adéla Králová2025-09-27Goal Rush
Anna Kučerová2024-05-11Pixel Racer
Anna Kučerová2025-04-15Dragon Forge
Eva Novotná2024-01-20Cube Logic
………

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

4/12