これを見るにはいくつかの方法があります。最初のオプションは、データベースよりも関係代数に精通している場合は簡単ですが、2番目のオプションは、関係代数に精通している場合は簡単です(より複雑な問題の場合はより正確です)。
最初のテーブル:
参加を理解することから始めます。あなたはあなたがあなたの3つのセット(テーブル)を持っていることを知っていますGuest
、Reservation
、およびRoom
、withの3つすべてが自然に結合されています(内部結合)。したがって、次のようにクエリを書き始めることができます:
SELECT *
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_
INNER JOIN Room r
ON res._roomId_ = r._roomId_;
それが完了したら、条件を適用します:
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;
または、g.age
の条件を設定することもできます Reservation
への参加 、ただし、WHERE
に条件を設定することをお勧めします INNER JOIN
の句 。
最後に、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;
操作の順序
このために、操作の順序を使用してクエリを記述します。したがって、括弧内のすべてが最初に実行されます。このようにすることで、Guest
に対するクエリを作成することから始めます。 :
SELECT g._guestId_
FROM Guest g
WHERE g.age < 20;
次のセットはReservation
になります 、そしてそれは自然に結合されます:
SELECT g._guestId_,
res._roomId_
FROM Guest g
INNER JOIN Reservation res
ON g._guestId_ = res._guestId_;
最後に、Room
に到着します セット、再び自然に参加:
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;