是的,这是一个家庭作业问题但是名字已经改变以保护无辜者。意思是,我不是要问作业问题本身,而是要求它的一小部分,这样我才能理解整体。
假设你有一个这样的SQL查询:
- 查询会列出多次出现的汽车价格。
select car_price from cars
group by car_price
having count (car_price) > 1;
关系代数中的一般形式是Y(gl,al)R 其中Y是希腊符号,GL是要分组的属性列表,AL是聚合列表
所以关系代数看起来像:
Y (count(car_price)) cars
那么,在该声明中如何写出“having”条款?有简写吗?如果没有,我只需要从那种关系中选择吗?这样的事可能吗?
SELECT (count(car_price) > 1) [Y (count(car_price)) cars]
我已经在互联网上搜索了几个小时,没有找到将HAVING转换为关系代数的例子。谢谢你的帮助!
答案 0 :(得分:3)
从(选择*来自价格> 1的汽车)中选择计数(*)作为汽车;
也称为关系闭合。
答案 1 :(得分:0)
对于所提出的实际问题,或多或少精确的答案,“关系代数 - 表示'拥有'条款的正确方法是什么?”,首先需要说明问题本身似乎暗示,或者假设存在“THE”关系代数这样的东西,但这种推定完全是不真实的!
代数是一组运算符,任何人都可以定义他喜欢的任何运算符集,这意味着任何人都可以定义他喜欢的任何代数!在他最近的出版物中,Hugh Darwen提到RESTRICT不是代数的基本运算符,尽管很多其他人都认为它是这样的。
特别是在汇总和摘要方面,关于如何将这些纳入关系代数的问题几乎没有达成共识。定义运算符,例如COUNT()(将关系作为参数值并返回整数)作为代数的一部分,可能与代数的闭包属性有问题,正是因为这样的运算符不返回关系...
所以抱歉,但最合适的答案似乎是这个问题的结论性答案几乎不可能给出......