有人可以帮我解决这两个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)
(很抱歉不知道怎么改变布局让它看起来可读)不知道那是否是远程正确的,对于第二个我不知道从哪里开始
答案 0 :(得分:0)
对于你的第一个查询,像你这样的接缝正在寻找经理的信息,你告诉我,如果我错过了理解,但是如何:
SELECT MANAGER.*
, DEPT.DEPTNAME
, DEPT.BUILDING
, DEPT_MANAGER
FROM DEPT DEPARTMENT
, EMPLOYEES MANAGER
WHERE DEPT.DEPTMANAGERID = MANAGER.EMPID
AND MANAGER.DEPTNO = DEPT.DEPTNO;
如果您想要经理的员工,您必须首先使用两个像您预期的表
答案 1 :(得分:0)
SQL查询块和关系代数之间的转换很简单:from
子句是笛卡尔积,where
子句列出限制(又称选择),select
子句是投影,按照我刚刚描述的顺序应用。这些关系查询在文献中称为SPJ(select-project-join)或SPC。
带有外连接和关系代数的查询之间的转换没有意义:与wikipedia RA page相反,外连接(更不用说用oracle专有的容易出错的语法编写的连接)不属于标准关系代数。
P.S。 Latex会使您的关系代数查询可读。