我试图了解如何正确地从关系代数转换为 SQL查询
我发现这是我努力转换的事情之一。有人能分享任何提示吗?
表格:
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map" style="width: 400px; height: 300px;"></div>
Duration:
<input id="duration" />Distance:
<input id="distance" />Origin Longitude
<input id="origin_longitude" />Origin Latitude
<input id="origin_latitude" />Destination Longitude
<input id="destination_longitude" />Destination Latitude
<input id="destination_latitude" />
<div>
关系代数:
Room(_roomId_, numberOfBeds, price)
Guest(_guestId_, homeTown, age)
Reservation(_roomId_, _guestId_, date)
查询: 我设法从声明的一部分中推断出以下内容:
Πprice(ΠroomId(ΠguestId(σage<20)Guest) Natural Join Reservation) Natural Join Room
我关闭了吗?
答案 0 :(得分:2)
您可以通过以下几种方式来看待这一点。如果你更熟悉数据库然后关系代数,第一个选项可能会更容易,而如果你熟悉关系代数,第二个选项会更容易(对于更复杂的问题更准确)。
表格第一:
首先找出你的联接。你知道你有三套(表格)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 :(得分:0)
应该是这样的......
{{#each calculatedRooms as |room|}}
<button class="room-container {{if (is-equal currentRoomId room.id) 'currentRoom'}}"
{{action "onRoomClicked" room.id}}>
...
{{/each}}
在您的关系代数表示法中,您拥有SELECT price, _roomId_ FROM room
inner join Reservation on (reservation._roomId_ = room._roomId_
inner join Guest on (reservation._guestId = guest._guestId and age <20) ;
和price
(选择)的项目,然后您在roomId
和此笛卡尔积Guest and Reservation
之间的自然加入之间进行自然加入..自然连接在sql中通过内部连接在关系两侧的主键上表达。最后你在and Room
上有条件这是一个由where子句或直接在连接条件addinng管理的条件guest age
条款