Der er to måder, du kan se på dette. Den første mulighed kan være lettere, hvis du er mere fortrolig med databaser end relationel algebra, mens den anden vil være nemmere (og mere præcis for mere komplekse problemer), hvis du er fortrolig med relationel algebra.
Tabeller først:
Start med at finde ud af dine joins. Du ved, at du har dine tre sæt (tabeller) Guest
, Reservation
og Room
, alle tre med er naturligt sammenføjede (indre sammenføjede). Så du kan begynde at skrive din forespørgsel sådan:
SELECT *
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_
INNER JOIN Room r
ON res._roomId_ = r._roomId_;
Når det er fuldført, skal du anvende dine betingelser:
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;
Alternativt kan du sætte betingelsen for g.age
i joinforbindelsen til Reservation
, men det anbefales at sætte betingelser i WHERE
klausul for INNER JOIN
.
Til sidst udfylder du din 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;
Rækkefølge for operationer
Til dette skriver du din forespørgsel ved at bruge rækkefølgen af operationer. Så alt inden for en parentes bliver henrettet først. Hvis du gør det på denne måde, starter du med at skrive forespørgslen mod Guest
:
SELECT g._guestId_
FROM Guest g
WHERE g.age < 20;
Det næste sæt ville være Reservations
, og det er naturligt forbundet:
SELECT g._guestId_,
res._roomId_
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_;
Til sidst kommer du til Room
sæt, igen naturligt sammenføjet:
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;