初学者SQL Developer的问题

时间:2013-04-16 13:35:09

标签: sql

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

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

  1. 在酒店支付高尔夫球和晚餐费用的客人的姓名 同样的行程。
  2. 任何帮助将不胜感激。我知道我没有包含下面每个表使用的实际数据,所以如果您需要任何其他可能有助于编写查询的信息,请告诉我。感谢任何帮助。谢谢。

    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) 
    

2 个答案:

答案 0 :(得分:0)

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

问题1 :您需要制作内部选择语句(子查询)以确定所有费用之间的平均费用,然后才能与每次费用进行比较。您的子查询可能如下所示:

SELECT AVG(AMOUNT) "AvgCharge" FROM CHARGES

您可以将其放在语句的SELECT部分​​或Cartesian product

问题2 :我猜你需要加入ITINERARYCHARGESCHARGETYPE表格。这是JOINs in Oracle的链接。之后,您必须将该声明限制为仅显示高尔夫和晚餐费用。

答案 1 :(得分: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两次(我不知道甲骨文,但在SQL服务器中这些需要别名(我会称之为C1和CT1以及C2和CT2)我会怀疑甲骨文一样) 。第一个连接将具有CT1 ='dinner'的where子句,并且两个表的第二个分组将包括CT2 ='golf'的where子句