Có một số cách mà bạn có thể xem xét điều này. Tùy chọn đầu tiên có thể dễ dàng hơn nếu bạn quen thuộc hơn với cơ sở dữ liệu sau đó là đại số quan hệ, trong khi tùy chọn thứ hai sẽ dễ dàng hơn (và chính xác hơn đối với các vấn đề phức tạp hơn) nếu bạn đã quen thuộc với đại số quan hệ.
Bàn đầu tiên:
Bắt đầu bằng cách tìm ra sự tham gia của bạn. Bạn biết rằng bạn có ba bộ (bảng) Guest
, Reservation
và Room
, cả ba với đều được nối tự nhiên (liên kết bên trong). Vì vậy, bạn có thể bắt đầu viết truy vấn của mình như sau:
SELECT *
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_
INNER JOIN Room r
ON res._roomId_ = r._roomId_;
Sau khi hoàn tất, hãy áp dụng các điều kiện của bạn:
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;
Ngoài ra, bạn có thể đặt điều kiện cho g.age
tham gia Reservation
, nhưng nên đặt các điều kiện trong WHERE
mệnh đề cho INNER JOIN
.
Cuối cùng, bạn điền SELECT
của mình :
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;
Thứ tự hoạt động
Đối với điều này, bạn viết truy vấn của mình bằng cách sử dụng thứ tự các thao tác. Vì vậy, mọi thứ bên trong dấu ngoặc đơn sẽ được thực thi đầu tiên. Làm theo cách này, bạn bắt đầu bằng cách viết truy vấn đối với Guest
:
SELECT g._guestId_
FROM Guest g
WHERE g.age < 20;
Tập hợp tiếp theo sẽ là Reservation
và điều đó được kết hợp tự nhiên:
SELECT g._guestId_,
res._roomId_
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_;
Cuối cùng, bạn đến Room
thiết lập, một lần nữa được tham gia tự nhiên:
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;