【问题标题】:Selecting from three Relation with Relational Algebra用关系代数从三个关系中选择
【发布时间】:2014-05-21 10:47:49
【问题描述】:

我有这个表

Customer{cid, name, phone, address}
Employee{eid, name, positon, salary}
Resp_for{cid,eid}

现在我想在关系代数中询问它应该打印出所有对客户负责的员工:'Obama'

我正在尝试,但不确定我是否清楚地理解了关系代数,所以我创建了这个:

PROJECT   (SELECT                 (Customer x Employeee x Resp_for))
       E.eid       C.name = 'Obama'
                 AND R.cid = C.cid
                 And R.eid = E.eid

那么它看起来如何作为 sql 查询?

SELECT E.eid
FROM Customer JOIN Employee JOIN Resp_for
WHERE C.name = 'Obama'
      AND R.cid = C.cid
      And R.eid = E.eid

对吗?

【问题讨论】:

    标签: sql database relational-algebra


    【解决方案1】:

    This 的正确 SQL 查询将是:-

    SELECT E.EID FROM CUSTOMERS C, EMPLOYEE E, RESP_FOR R
    WHERE E.EID = R.EID
    AND R.CID = C.CID
    AND C.NAME = 'OBAMA';
    

    现在您可以将此查询转换为关系代数。

    【讨论】:

      【解决方案2】:

      这是正确的,但如果不将表别名(R、C 和 E)放在它们各自的表上,它就不太可能运行。

      现在有一种表达联接的新形式更常见:

      SELECT E.eid
      FROM Customer C
      INNER JOIN Resp_for R
          ON R.cid = C.cid
      INNER JOIN Employee E
          ON E.eid = R.eid
      WHERE C.name = 'Obama'
      

      含义相同,格式不同,恕我直言,更容易同化。

      【讨论】:

      • 所以我认为在关系代数中可能是 πE.eid(σC.Name='Obama'(Customer)))⋈Resp_for⋈Employee)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多