查找仅提供30岁以上人群食用的比萨饼的所有比萨饼店

时间:2019-03-04 22:54:27

标签: relational-database relational-algebra

我知道正确的答案,但我不确定其中的一部分。

编辑后的更新: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岁的年龄吗?但是,我知道这是错误的。有人可以解释这背后的逻辑谢谢!

1 个答案:

答案 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岁以下的人。