sql >> Database teknologi >  >> RDS >> Mysql

Konvertering af relationel algebra til tilsvarende SQL-forespørgsel

Der er to måder, du kan se på dette. Den første mulighed kan være lettere, hvis du er mere fortrolig med databaser end relationel algebra, mens den anden vil være nemmere (og mere præcis for mere komplekse problemer), hvis du er fortrolig med relationel algebra.

Tabeller først:

Start med at finde ud af dine joins. Du ved, at du har dine tre sæt (tabeller) Guest , Reservation og Room , alle tre med er naturligt sammenføjede (indre sammenføjede). Så du kan begynde at skrive din forespørgsel sådan:

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

Når det er fuldført, skal du anvende dine betingelser:

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;

Alternativt kan du sætte betingelsen for g.age i joinforbindelsen til Reservation , men det anbefales at sætte betingelser i WHERE klausul for INNER JOIN .

Til sidst udfylder du din 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;

Rækkefølge for operationer

Til dette skriver du din forespørgsel ved at bruge rækkefølgen af ​​operationer. Så alt inden for en parentes bliver henrettet først. Hvis du gør det på denne måde, starter du med at skrive forespørgslen mod Guest :

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

Det næste sæt ville være Reservations , og det er naturligt forbundet:

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

Til sidst kommer du til Room sæt, igen naturligt sammenføjet:

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. Hvordan får jeg SQL-database til R fra lokal vært?

  2. Heroku psql:FATAL:resterende forbindelsespladser er reserveret til ikke-replikering af superbrugerforbindelser

  3. Dobbelt kolon (::) notation i SQL

  4. Brug af Jenkins med Kubernetes AWS, del 1