【发布时间】:2015-12-28 08:45:50
【问题描述】:
Query:查找已预订所有船只的船员姓名
这可以在关系代数中表示为:
1.π<sub>sname</sub> ( ((σ<sub>sid,bid</sub> Reserves) / (σ<sub>bid</sub> Boats)) ⋈ Sailors)
根据关系代数,除法也可以使用基本代数运算符表示如下:
A/B= π<sub>x</sub>(A) - π<sub>x</sub>((π<sub>x</sub>(A) * B) - A )
因此,如果我 convert 声明 1 按照声明 2 那么
Reserves/Boats= π<sub>sid</sub>(Reserves) - π<sub>sid</sub>(( π<sub>bid</sub>(Reserves) * Boats) - Reserves )
我如何用 SQL 表示Statement 3,就像在关系代数中一样(即不使用minus/Except(-) and Cross join(*) 以外的任何运算符)。
我试图在不使用NOT EXISTS and EXISTS 条件的情况下实现它。
表结构如下:Sailors(sid: integer, sname: string, rating: integer, age: real)Boats(bid: integer, bname: string, color: string)Reserves(sid: integer, bid: integer, day: date)
【问题讨论】:
-
如果您在 SQLFiddle 中构建并填充了您希望使用的数据,并且提供您期望的结果的想法,将会很有帮助。 See "How to Ask A Good Question"。谢谢。
标签: sql oracle relational-algebra relational-division