0

有人可以帮我算出这两条 SQL 语句的关系代数吗。我无法理解它

SELECT EMP.*
     , DEPT.DEPTNAME
     , DEPT.BUILDING
     , MANAGER.NAME DEPT_MANAGER
  FROM DEPT DEPARTMENT
     , EMPLOYEES EMP
     , EMPLOYEES MANAGER
 WHERE DEPT.DEPTMANAGERID = MANAGER.EMPID
   AND EMP.DEPTNO = DEPT.DEPTNO;

和:

SELECT rep.repname SalesRep
     , prod.productno ProdID
     , prod.productname Name
     , prod.productdesc ProdDesc
     , prod.units Unit
     , prod.productprice Price
     , paint.*
     , chem.*
     , feed.*
     , sup.repname Supervisor
  FROM products prod
     , salesreps rep
     , salesreps sup
     , paintproducts paint
     , chemicalproducts chem
     , animalfeedproducts feed
 WHERE rep.salesrepid = prod.productsalesrepid
   AND rep.supervisor = sup.salesrepid (+)
   AND prod.productno = paint.productno (+)
   AND prod.productno = chem.productno (+)
   AND prod.productno = feed.productno (+);

我为第一个尝试了这个:

π emp.*, dept.deptname, dept.building, manager.name (Department |×| deptmanagerid = empid Employees) X (Employee |×| Emp.Deptno = Dept.DeptNo Department) 

(抱歉不知道如何更改布局,所以它看起来可读)不知道那是否甚至远程正确,至于第二个我只是不知道从哪里开始

4

2 回答 2

0

对于您的第一个查询,接缝就像您正在寻找经理的信息一样,您告诉我我是否理解错了,但是这个怎么样:

SELECT MANAGER.*
 , DEPT.DEPTNAME
 , DEPT.BUILDING
 , DEPT_MANAGER
FROM DEPT DEPARTMENT
 , EMPLOYEES MANAGER
WHERE DEPT.DEPTMANAGERID = MANAGER.EMPID
AND MANAGER.DEPTNO = DEPT.DEPTNO;

如果你想要经理的员工,你必须首先使用你想要的两张表

于 2012-11-14T15:04:49.070 回答
0

SQL 查询块和关系代数之间的转换很简单:from子句是笛卡尔积,where子句列出限制(也称为选择),select子句是投影,按照我刚才描述的顺序应用。这种关系查询在文献中称为 SPJ(选择项目连接)或 SPC。

带有外连接的查询和关系代数之间的转换没有意义:与维基百科 RA 页面相反,外连接(更不用说用 oracle 专有的易错语法编写的连接)不是标准关系代数的一部分。

PS Latex 将使您的关系代数查询可读。

于 2012-11-14T18:05:13.213 回答