我正在尝试使用关系代数编写以下查询:
"Find the names of sailors who reserved a red or a green boat"
这是我的解决方案:
但是这本书给出了以下解决方案:
书中给出的另一个等效解决方案:
这里是相关表格:
我的问题是,我们不能在选择运算符中使用“或”符号(V)吗?我的解决方案有误吗?为什么我们需要重命名运算符?
由于
答案 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)。这甚至不是代数操作!!!
(虽然在语言设计中为用户设计“命名表达式”的可能性是一个有效且有用的想法,但他随后可以仅使用指定的名称进行引用,这是语言设计的问题,而不是关系代数!)