Es gibt zwei Möglichkeiten, wie Sie dies betrachten können. Die erste Option ist möglicherweise einfacher, wenn Sie mit Datenbanken besser vertraut sind als mit relationaler Algebra, während die zweite einfacher (und genauer für komplexere Probleme) ist, wenn Sie mit relationaler Algebra vertraut sind.
Tabellen zuerst:
Beginnen Sie damit, Ihre Joins herauszufinden. Sie wissen, dass Sie Ihre drei Sätze (Tabellen) Guest
haben , Reservation
, und Room
, alle drei von with sind natürlich verbunden (inner verbunden). Sie könnten also damit beginnen, Ihre Abfrage so zu schreiben:
SELECT *
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_
INNER JOIN Room r
ON res._roomId_ = r._roomId_;
Sobald dies abgeschlossen ist, wenden Sie Ihre Bedingungen an:
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;
Alternativ können Sie die Bedingung für g.age
setzen im Join zu Reservation
, aber es wird empfohlen, Bedingungen in WHERE
zu setzen -Klausel für INNER JOIN
.
Schließlich füllen Sie Ihr SELECT
aus :
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;
Betriebsordnung
Dazu schreiben Sie Ihre Abfrage in der Reihenfolge der Operationen. Also wird alles innerhalb einer Klammer zuerst ausgeführt. Auf diese Weise beginnen Sie damit, die Abfrage für Guest
zu schreiben :
SELECT g._guestId_
FROM Guest g
WHERE g.age < 20;
Der nächste Satz wäre Reservations
, und das ist natürlich verbunden:
SELECT g._guestId_,
res._roomId_
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_;
Schließlich kommst du in den Room
gesetzt, wieder natürlich verbunden:
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;