-1

所以我目前正在上 DBMS 课程,我们正在做一个关于 SQL 的部分。它基本上由我为入住酒店的 5 位客人创建一个数据库。有 8 个包含信息的表格(下面列出的表格)。我目前拥有输入和工作表的所有信息(不包括在下面),但我被困在我们需要为作业编写的一些查询上。

我坚持的查询:甚至不知道从哪里开始。

  1. 在同一行程中因高尔夫和晚餐而产生费用的客人姓名。

任何帮助,将不胜感激。我知道我没有包括下面每个表格使用的实际数据,所以如果您需要任何其他可能有助于编写查询的信息,请告诉我。任何帮助表示赞赏,谢谢。

1.GUEST (GUESTID, LASTNAME, FIRSTNAME, MIDINIT, STRADDR, CITY, STATE, ZIP, PHONE, EMAIL, AGE)

2.RESERVATION  RESID, RESDATETIME, CHECKINDATE, CHECKOUTDATE, ROOMTYPE, TOTALCOST, GUESTID)

3.CREDITCARD (CCNO, TYPE, EXPIRYDATE, GUESTID)

4.ITINERARY (ITINID, CHECKINDATETIME, CHECKOUTDATETIME, ADULTCOUNT, CHILDCOUNT, GUESTID, ROOMNO)

5.ROOM (ROOMNO, ROOMTYPE, DAILYRATE, AMENITIES)

6.BILL (BILLID, BILLDATE, AMOUNTDUE, ITINID, CCNO)

7.CHARGETYPE (CHARGEID, DESCRIPTION)

8.CHARGES (CHARGEID, ITINID, CHARGEDATETIME, AMOUNT, GUESTID) 
4

2 回答 2

0

让我们分解一下。您需要的第一件事是客人的姓名。很明显,这必须来自客人餐桌。

所以你有了

select FIRSTNAME, MIDINIT,  LASTNAME, 
From Guest

现在你只想要有行程的客人,所以你对行程进行内部连接(提示你加入 GuestID)

 select FIRSTNAME, MIDINIT,  LASTNAME, ItineraryID
    From Guest
 JOIN ITINERARY on GUEST.GUESTID =  ITINERARY.GUESTID

现在您只需要对该行程收费的客人。

因此,您会考虑加入 CHARGES 和 CHARGETYPE(获取费用类型)并使用 where 子句将费用限制为您感兴趣的类型。但是因为您要确保同时拥有这两种类型的费用,您需要加入 CHARGES 和 CHARGETYPE 两次(我不了解 Oracle,但在 SQL Server 中这些需要别名(我将它们称为 C1 和 CT1 以及 C2 和 CT2)我怀疑 Oracle 也是如此)。第一个连接将有一个 CT1 = 'dinner' 的 where 子句,两个表的第二个分组将包括一个 CT2 = 'golf' 的 where 子句

于 2013-04-16T22:04:53.917 回答
0

因为这是一个家庭作业,我不想只是发布答案,但我有很好的线索给你。

问题 1:您需要创建一个内部选择语句(子查询)来确定所有费用的平均费用,然后才能与每个费用进行比较。您的子查询可能如下所示:

SELECT AVG(AMOUNT) "AvgCharge" FROM CHARGES

您可以将其放在语句的 SELECT 部分或作为笛卡尔积

问题 2:我猜您需要将ITINERARYCHARGESCHARGETYPE表连接在一起。这是Oracle 中 JOIN的链接。之后,您必须将该声明限制为仅显示高尔夫和晚餐费用。

于 2013-04-16T14:08:54.363 回答