使用关系代数编写以下查询

时间:2013-04-06 09:23:42

标签: database relational-database relational-algebra

我正在尝试使用关系代数编写以下查询:

"Find the names of sailors who reserved a red or a green boat"

这是我的解决方案: enter image description here

但是这本书给出了以下解决方案: enter image description here

书中给出的另一个等效解决方案: enter image description here

这里是相关表格: enter image description here

我的问题是,我们不能在选择运算符中使用“或”符号(V)吗?我的解决方案有误吗?为什么我们需要重命名运算符?

由于

2 个答案:

答案 0 :(得分:1)

我测试了这段代码,在我的phpmyadmin中,它必须是工作

选择所有已预留船只的船员;

SELECT * FROM sailors INNER JOIN reserves ON reserves.sid = sailors.sid LEFT JOIN boats ON reserves.bid = boats.bid

特定选择(颜色:红色);

使用WHERE color =' red'

SELECT * FROM sailors INNER JOIN reserves ON reserves.sid = sailors.sid LEFT JOIN boats ON reserves.bid = boats.bid WHERE color = 'red'

多重选择(颜色:红色和蓝色);

使用WHERE color =' red' '蓝色'

SELECT * FROM sailors INNER JOIN reserves ON reserves.sid = sailors.sid LEFT JOIN boats ON reserves.bid = boats.bid WHERE color = 'red' or 'blue'

答案 1 :(得分:1)

更多的证据表明没有“关系代数”这样的东西。

关于限制:

你的书/老师似乎遵循限制条件只能是“非常基本”的原则。在某种意义上,作为http://en.wikipedia.org/wiki/Selection_%28relational_algebra%29上的wiki文章(至少引用了一个属性,另一个属性或常量值,只涉及一个单独的比较运算符,不允许其他运算符调用,例如SIN(角度attr)或MONTH(datetime) attr)或......)。

但是这种限制(在限制条件下)是不必要的。关于http://en.wikipedia.org/wiki/Relational_algebra#Selection_.28.CF.83.29上的关系代数的维基文章明确地说“......是一个命题公式,由......和逻辑运算符AND,OR,NOT ......”组成。

至于重命名:

关系代数中的RENAME运算符用于产生一个与输入不同的关系值,只是某些属性具有“更改名称”。

您的图书/教师显然使用名为“重命名”的操作符为某个指定的关系表达式指定名称(在您的示例中为UNION)。这甚至不是代数操作!!!

(虽然在语言设计中为用户设计“命名表达式”的可能性是一个有效且有用的想法,但他随后可以仅使用指定的名称进行引用,这是语言设计的问题,而不是关系代数!)