Mysql
 sql >> база данни >  >> RDS >> Mysql

Преобразуване на релационна алгебра в съответстваща SQL заявка

Има няколко начина, по които можете да разгледате това. Първата опция може да е по-лесна, ако сте запознати повече с базите данни, отколкото с релационната алгебра, докато втората ще бъде по-лесна (и по-точна за по-сложни проблеми), ако сте запознати с релационната алгебра.

Първи маси:

Започнете, като разберете вашите присъединявания. Знаете, че имате своите три комплекта (маси) Guest , Reservation и Room , и трите с са естествено свързани (вътрешно свързани). Така че можете да започнете да пишете заявката си така:

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;

Следващият набор ще бъде Reservations , и това е естествено съединено:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Запазване на идентификатора във Facebook като int или varchar?

  2. Сортирането в Java не е същото като сортирането в MySQL

  3. array_agg() и array_to_string на PostgreSQL в MySQL

  4. Премахнете наклонените черти в mysql заявката на node js

  5. Свързване с mysql с помощта на php