我知道正确的答案,但我不确定其中的一部分。
编辑后的更新:RA是一个关系代数解释器,它将关系代数查询转换为SQL查询,然后在标准关系数据库系统上执行SQL。因此,该语言类似于SQL,但基于关系代数。
以下是示例数据库,供您参考: 服务(比萨店,比萨饼,价格) 吃(名字,比萨) 人(姓名,年龄,性别)
\project_{pizzeria} Serves
\diff
\project_{pizzeria} (
Serves
\join
((\project_{pizza} Serves)
\diff
(\project_{pizza}((\select_{age>'30'} Person) \join Eats)))
)
我不明白的是查询的最后一部分
(\project_{pizza}((\select_{age>'30'} Person) \join Eats)))
)
您是否要区分年龄<30而不是年龄> 30?这会减去所有小于30岁的年龄,而让您剩下所有大于30岁的年龄吗?但是,我知道这是错误的。有人可以解释这背后的逻辑谢谢!
答案 0 :(得分:2)
不要下结论。仔细阅读。
project {pizza} (select {age>'30'} (Person) join Eats)
这个表情涉及30岁以上的人。但这不是最终答案。
您从其他内容中减去了这些元组。如果您从所有人中减去30岁以上的人,那么您将拥有不超过30名的人。这不是30岁以上的人,并且您也没有从所有人中减去它。它是30岁以上的人食用的比萨饼,您要从所有比萨饼中减去它,以使30岁以上的人不食用比萨饼。
project {pizza} (Serves) - project {pizza} (select {age>'30'} (Person) join Eats)
稍后您会得到这些比萨饼的披萨店,即提供披萨的披萨店,这些披萨店不供30岁以上的人们食用。
project {pizzeria} ( Serve join ( project {pizza} (Serves) - project {pizza} (select {age>'30'} (Person) join Eats) )
然后,您将其从所有比萨饼店中减去,以获得仅提供30岁以上人群食用的比萨饼的比萨饼店。
project {pizzeria} (Serves) - project {pizzeria} ( Serve join ( project {pizza} (Serves) - project {pizza} (select {age>'30'} (Person) join Eats) ) )
因此,您永远不会与30岁以上的人进行区分/减去/减去。尤其是,您绝不会从所有人中减去30岁以下的人。