我在家庭作业问题上遇到了麻烦,我发现很难理解做什么背后的逻辑。
问:写一个查询,列出购买了最贵书的客户的客户名称和书名。
关系模式 客户(CID,名称,地址)
订单(Ordernum,CID,Order_date,Cardnum)
订单(Ordernum,ISBN,Qty,Ship_date)
书(ISBN,书名,作者,Qty_in_stock,价格)
这是我的尝试:
重命名(昂贵,投影cid(订单)加入Orderlist加入(选择价格< d.price((书)跨产品Pd Book))
exp - 预测价格(书)
投影名称Customer join exp
答案 0 :(得分:2)
您对跨产品和价格比较的尝试表明您正在思考正确的方向,但尚未完全实现。在你拿到所有便宜书籍存在的书籍之后,你如何获得没有更便宜书籍的书籍?从内到外,您需要在加入Orderlist
,Orders
和Customer
之前执行此操作,以找到买方。
请注意您的语法和操作顺序。事实上,你的答案很难理解。例如,Pd
,d
和exp
是什么?为什么要将某些内容重命名为expensive
,然后再使用该字词?如果两个表达式没有共同的属性,projection cid (orders)
如何与Orderlist
结合?它应该有助于写出每个子表达式的结果的标题(从里到外工作),以可视化操作的顺序。
如果要将复杂RA表达式分解为多个步骤,可以将一个表达式的结果分配给要在下一个表达式中使用的变量。请记住,这是代数学校中的代数,只有更复杂的值和运算符。
答案 1 :(得分:0)
T1(price)<--Ƴmax(price)(Book)
T2<--Πisbn,title,price(Book natural join T1)
T3<--(T2 natural join orderlist) natural join orders
T4<--πname,title(T3 natural join Customer)