0

我目前正在为几周后的数据库考试而学习,过去他们提供的论文(没有答案)给了我一些问题。

我担心下面的问题,因为如果我以正确的方式接近它们,我没有什么可以检查的,所以我想知道这里是否有人可以看看并帮助我?我是否以正确的方式回答了他们?

谢谢...

以下架构中有 3 个表,

Suppliers (sid(PK):integer, sname:string, address:string)
Parts (pid(PK):integer, pname:string, color:string)
Catalog (sid(PK):integer, pid:integer, cost:real)

目录关系列出了供应商对零件收取的价格。

我有以下问题,我的答案如下:

  1. 列出有供应商的零件的名称

    SELECT pname
    FROM Parts, Catalog
    WHERE Parts.pid = Catalog.pid
    AND Catalog.sid = Suppliers.sid
    AND Catalog.sid NOT NULL;
    
  2. 查找供应红色零件或绿色零件的供应商的 sid

    SELECT sid
    FROM Catalog, Parts
    WHERE Catalog.pid = Parts.pid 
    AND Parts.color = 'red' 
    OR Parts.color = 'green';
    
  3. 找出对某个零件收费高于该零件平均成本的供应商的 sids(对所有供应该零件的供应商进行平均)

    SELECT sid
    FROM Catalog
    WHERE cost > (AVG(cost));
    
4

2 回答 2

0

这是我最好的回答,但我还没有测试过

列出有供应商的零件的名称

SELECT pname
FROM Parts
WHERE 
Parts.pid NOT IN
  (SELECT Catalog.pid FROM Catalog);

查找供应红色零件或绿色零件的供应商的 sid

SELECT sid
FROM Catalog, Parts
WHERE Catalog.pid = Parts.pid 
AND (Parts.color = 'red' 
OR Parts.color = 'green');

找出对某个零件收费高于该零件平均成本的供应商的 sids(对所有供应该零件的供应商进行平均)

SELECT sid
FROM Catalog c
INNER JOIN
(SELECT pid, AVG(cost) AS avg_cost
 FROM Catalog
 GROUP BY pid) c_avg ON c.pid = c_avg.pid AND c.cost > c_avg.avg_cost
ORDER BY c_avg.avg_cost DESC
于 2013-11-04T05:26:27.247 回答
0

你可以在这里练习.... http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

即使您没有成为 DBA,这也是一项对您非常有帮助的技能。

于 2013-11-04T05:29:25.403 回答