Ada beberapa cara untuk melihat ini. Opsi pertama mungkin lebih mudah jika Anda lebih mengenal database daripada aljabar relasional, sedangkan opsi kedua akan lebih mudah (dan lebih akurat untuk masalah yang lebih kompleks) jika Anda terbiasa dengan aljabar relasional.
Tabel Pertama:
Mulailah dengan mencari tahu gabungan Anda. Anda tahu bahwa Anda memiliki tiga set (tabel) Guest
, Reservation
, dan Room
, ketiganya menyatu secara alami (inner join). Jadi Anda bisa mulai menulis kueri Anda seperti ini:
SELECT *
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_
INNER JOIN Room r
ON res._roomId_ = r._roomId_;
Setelah selesai, terapkan ketentuan Anda:
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;
Atau Anda dapat memberikan kondisi untuk g.age
di gabung ke Reservation
, tetapi disarankan untuk menempatkan kondisi di WHERE
klausa untuk INNER JOIN
.
Terakhir, Anda mengisi 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;
Urutan operasi
Untuk ini, Anda menulis kueri Anda menggunakan urutan operasi. Jadi semua yang ada di dalam tanda kurung akan dieksekusi terlebih dahulu. Melakukannya dengan cara ini, Anda mulai dengan menulis kueri terhadap Guest
:
SELECT g._guestId_
FROM Guest g
WHERE g.age < 20;
Set berikutnya adalah Reservation
, dan itu wajar bergabung:
SELECT g._guestId_,
res._roomId_
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_;
Akhirnya, Anda datang ke Room
set, lagi-lagi bergabung secara alami:
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;