欢迎访问我的个人博客:Talk is cheap. Show me the code!。我相信会有所收获的。
4.3
Suppliers(sid: integer, sname: string, address: string)
Parts(pid: integer, pname: string, color: string)
Catalog(sid: integer, pid: integer, cost: real)
下面答案中的RA代表Relational Algebra,TRC代表Tuple Relational Calculus
1. 找出供应某种红色零件的供应商的名字
2. 找出供应某种红色或绿色零件的供应商的sids
3. 找出供应某种红色零件或位于221Packer Ave的供应商的sids
4. 找出供应某种红色和绿色零件的供应商的sids
5. 找出供应每一种零件的供应商的sids
6. 找出供应每种红色零件的供应商的sids
7. 找出供应每种红色或者绿色零件的供应商的sids
8. 找出供应每种红色零件或者供应每种绿色零件的供应商的sids
9. 找出sids对,其中第一个sid的供应商对某些零件的要价比第二个sid的供应商的高
10. 找出至少由两个供应商供应的零件的pids
11. 找出名为Yosemite Sham的供应商供应的最贵的零件的pids
12. 找出每个供应商都供应并且价格少于200美元的零件的pids(如果对某零件存在供应商不供应,或者价格大于200美元,那么该零件就不被选择)。
答案如下:因为是在csdn上写,所以图片带有水印。
5.4考虑下面的关系模式。一个雇员可以在多个部门工作,Works关系的pic_time字段表明了一个指定的员工在一个指定的部门工作的时间比率。
Emp(eid: integer, ename: string, age: integer, salary: real)
Works(eid: integer, did: integer, pic_time: integer)
Dept(did: integer, budget: real, managerid: integer)
用SQL写出下面的查询:
(1) 打印出同时工作于硬件和软件两个部门的每个雇员的名字和年龄。
答:
SELECT E.ename, E.age
FROM Emp E, Works W1, Works W2, Dept D1, Dept D2
WHERE E.eid = W1.eid AND W1.did = D1.did
AND D1.dname = ‘Hardware’
AND W2.did = D2.did AND D2.dname = ‘Software’
(2) 对于每个超过20个等价全时员工(也就是说半时和全时的员工加起来至少有这么多)的部门,打印出那个部门的did以及在该部门工作的雇员数。
答:
SELECT W.did, COUNT(W.eid)
FROM Works W
GROUP