sql >> データベース >  >> RDS >> Mysql

関係代数を対応するSQLクエリに変換する

    これを見るにはいくつかの方法があります。最初のオプションは、データベースよりも関係代数に精通している場合は簡単ですが、2番目のオプションは、関係代数に精通している場合は簡単です(より複雑な問題の場合はより正確です)。

    最初のテーブル:

    参加を理解することから始めます。あなたはあなたがあなたの3つのセット(テーブル)を持っていることを知っていますGuestReservation 、および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;
    


    1. heroku run rake db:migrate error

    2. PHPでSQLServerに接続できません

    3. 複数の緯度/経度ポイントの半径

    4. DATE列にjava.sql.Timestampを渡すと、Oracleが非常に遅いのはなぜですか?