sql >> Databáze >  >> RDS >> Mysql

Převod relační algebry na odpovídající SQL dotaz

Existuje několik způsobů, jak se na to můžete podívat. První možnost může být snazší, pokud znáte více databáze než relační algebru, zatímco druhá možnost bude jednodušší (a přesnější pro složitější problémy), pokud znáte relační algebru.

První tabulky:

Začněte tím, že zjistíte své spojení. Víte, že máte své tři sady (stoly) Guest , Reservation a Room , všechny tři s jsou přirozeně spojené (vnitřně spojené). Takže můžete začít psát svůj dotaz takto:

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

Jakmile to dokončíte, použijte své podmínky:

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;

Případně můžete zadat podmínku pro g.age ve spojení s Reservation , ale doporučuje se vkládat podmínky do WHERE klauzule pro INNER JOIN .

Nakonec vyplníte 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;

Pořadí operací

Za tímto účelem napíšete svůj dotaz pomocí pořadí operací. Takže vše uvnitř závorky se provede jako první. Když to uděláte tímto způsobem, začnete tím, že napíšete dotaz proti Guest :

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

Další sada bude Reservation , a to je přirozené spojení:

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

Nakonec se dostanete do Room sada, opět přirozeně spojená:

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. MySQL PHP srovnání PSČ konkrétně vzdálenosti

  2. Dotaz na počet událostí Oracle

  3. Oracle Cloud Breakdown – náklady na hostování databáze na OCI

  4. DBMS_LOB.SUBSTR() vyvolává příliš malou vyrovnávací paměť řetězce znaků