Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Konwertowanie algebry relacyjnej na odpowiednie zapytanie SQL

Można na to spojrzeć na kilka sposobów. Pierwsza opcja może być łatwiejsza, jeśli jesteś bardziej zaznajomiony z bazami danych niż z algebrą relacyjną, podczas gdy druga będzie łatwiejsza (i dokładniejsza w przypadku bardziej złożonych problemów), jeśli znasz algebrę relacyjną.

Najpierw tabele:

Zacznij od ustalenia swoich sprzężeń. Wiesz, że masz swoje trzy zestawy (stoły) Guest , Reservation i Room , wszystkie trzy z są połączone w sposób naturalny (połączone wewnętrzne). Możesz więc zacząć pisać zapytanie w ten sposób:

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

Po zakończeniu zastosuj swoje warunki:

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;

Alternatywnie możesz umieścić warunek dla g.age w dołączeniu do Reservation , ale zaleca się umieszczenie warunków w WHERE klauzula INNER JOIN .

Na koniec wypełniasz swój 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;

Kolejność operacji

W tym celu piszesz zapytanie, używając kolejności operacji. Więc wszystko w nawiasie jest wykonywane jako pierwsze. Robiąc to w ten sposób, zaczynasz od napisania zapytania do Guest :

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

Następny zestaw to Reservations , i to jest naturalne połączone:

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

Wreszcie trafiasz do Room zestaw, ponownie naturalny połączony:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wyświetlanie daty/godziny na stronie na podstawie czasu komputera użytkownika w innym kraju;

  2. Dlaczego nie mogę wyświetlić dwa razy tego samego wyniku za pomocą mysqli_fetch_assoc?

  3. Mysql2::Błąd:Nieprawidłowa wartość ciągu

  4. Jak napisać instrukcję sql z mnożeniem warunkowym?

  5. jak zaktualizować jedno lub więcej pól ignorując puste pola do bazy mysql?