sql >> Database >  >> RDS >> Mysql

Relationele algebra converteren naar overeenkomstige SQL-query

Er zijn een paar manieren waarop je hier naar kunt kijken. De eerste optie is misschien makkelijker als je meer vertrouwd bent met databases dan met relationele algebra, terwijl de tweede makkelijker (en nauwkeuriger voor complexere problemen) zal zijn als je bekend bent met relationele algebra.

Tafels eerst:

Begin met het uitzoeken van je joins. Je weet dat je je drie sets (tafels) hebt Guest , Reservation , en Room , alle drie met zijn natuurlijk verbonden (binnenste verbonden). Dus je zou kunnen beginnen met het schrijven van je vraag als volgt:

SELECT *
FROM Guest g
    INNER JOIN Reservation res
        ON g._guestId_ = res._guestId_
    INNER JOIN Room r
        ON res._roomId_ = r._roomId_;

Zodra dat is voltooid, past u uw voorwaarden toe:

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;

Als alternatief kunt u de voorwaarde voor g.age in de join naar Reservation , maar het wordt aanbevolen om voorwaarden in de WHERE . te zetten clausule voor INNER JOIN .

Ten slotte vult u uw 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;

Volgorde van bewerkingen

Hiervoor schrijft u uw vraag in volgorde van bewerkingen. Dus alles tussen haakjes wordt eerst uitgevoerd. Als je het op deze manier doet, begin je met het schrijven van de query tegen Guest :

SELECT g._guestId_
FROM Guest g
WHERE g.age < 20;

De volgende set is Reservations , en dat is natuurlijk verbonden:

SELECT g._guestId_,
    res._roomId_
FROM Guest g
    INNER JOIN Reservation res
        ON g._guestId_ = res._guestId_;

Eindelijk kom je bij de Room set, weer natuurlijk samengevoegd:

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. Een lijst krijgen van alle kolomnamen in een tabel die geen NULL als standaardwaarde hebben?

  2. Hoe tel je het aantal keren dat een bepaalde substring in een SQL-varchar voorkomt?

  3. C# DateTime verandert naar een ander formaat

  4. PHP gebruiken om meerdere MYSQL-query's uit te voeren