无法弄清楚如何完成sql语句

时间:2013-11-04 05:16:36

标签: mysql sql database relational-database database-schema

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

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

...谢谢

以下架构中有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. 列出有供应商的零件的pnames

    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));
    

2 个答案:

答案 0 :(得分:0)

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

列出有供应商的零件的pnames

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

答案 1 :(得分:0)

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

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