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;| id | datum | nazev | pocet |
|---|---|---|---|
| 1 | 2024-01-20 | Cube Logic | 1 |
| 1 | 2024-01-20 | Moon Farm | 1 |
| 2 | 2024-02-14 | Galaxy Trader | 1 |
| 3 | 2024-02-29 | Ocean Deep | 1 |
| … | … | … | … |
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.idJeho 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á.
Jak psát:
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:
| nazev | jmeno | hvezdicky |
|---|---|---|
| Bakery Story | Klára Horáková | 4 |
| Cube Logic | Eva Novotná | 3 |
| Cube Logic | Tereza Svobodová | 5 |
| Dragon Forge | Anna 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:
| jmeno | datum | nazev |
|---|---|---|
| Adéla Králová | 2025-02-14 | Star Pilots |
| Adéla Králová | 2025-09-27 | Goal Rush |
| Anna Kučerová | 2024-05-11 | Pixel Racer |
| Anna Kučerová | 2025-04-15 | Dragon Forge |
| Eva Novotná | 2024-01-20 | Cube Logic |
| … | … | … |
Začněte programovat zdarma
4/12