Existuje několik způsobů, jak se na to můžete podívat. První možnost může být snazší, pokud znáte více databáze než relační algebru, zatímco druhá možnost bude jednodušší (a přesnější pro složitější problémy), pokud znáte relační algebru.
První tabulky:
Začněte tím, že zjistíte své spojení. Víte, že máte své tři sady (stoly) Guest
, Reservation
a Room
, všechny tři s jsou přirozeně spojené (vnitřně spojené). Takže můžete začít psát svůj dotaz takto:
SELECT *
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_
INNER JOIN Room r
ON res._roomId_ = r._roomId_;
Jakmile to dokončíte, použijte své podmínky:
SELECT *
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_
INNER JOIN Room r
ON res._roomId_ = r._roomId_
WHERE g.age < 20;
Případně můžete zadat podmínku pro g.age
ve spojení s Reservation
, ale doporučuje se vkládat podmínky do WHERE
klauzule pro INNER JOIN
.
Nakonec vyplníte SELECT
:
SELECT g._guestId_,
res._roomId_,
r.price
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_
INNER JOIN Room r
ON res._roomId_ = r._roomId_
WHERE g.age < 20;
Pořadí operací
Za tímto účelem napíšete svůj dotaz pomocí pořadí operací. Takže vše uvnitř závorky se provede jako první. Když to uděláte tímto způsobem, začnete tím, že napíšete dotaz proti Guest
:
SELECT g._guestId_
FROM Guest g
WHERE g.age < 20;
Další sada bude Reservation
, a to je přirozené spojení:
SELECT g._guestId_,
res._roomId_
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_;
Nakonec se dostanete do Room
sada, opět přirozeně spojená:
SELECT g._guestId_,
res._roomId_,
r.price
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_
INNER JOIN Room r
ON res._roomId_ = r._roomId_
WHERE g.age < 20;