【问题标题】:cannot figure out how to complete the sql statements无法弄清楚如何完成 sql 语句
【发布时间】:2013-11-04 05:16:36
【问题描述】:

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

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

谢谢...

以下架构中有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. 查找供应红色零件或绿色零件的供应商的 sids

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

【问题讨论】:

  • 无需重复 WHERE 语句。它以WHERE 开头,所有其他条件都使用ANDOR 运算符添加。
  • 好的,谢谢您的提示,我不确定是否必须再说一遍。除此之外,它看起来对吗?
  • hmm,你在条件(WHERE)或SELECT中使用的所有表,必须包含在FROM语句中,如果有多个则连接在一起。
  • 好的,我现在已将其更改为将这些表包含在 FROM 语句中。还要别的吗? (到目前为止非常感谢)
  • 我记得这场斗争......这是处理它的方法。使用 INNER JOIN 从表中获取所有数据(在您的书中)。然后用 WHERE 过滤数据。

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢您的帮助,我对 Parts.pid NOT IN 部分感到有些困惑。您是说 Parts 中的 pid 不在目录中的 pid 中吗?你不需要看看哪里没有供应商吗?
  • 我想说的是,如果零件没有供应商,那么它的 pid 将永远不会出现在声明 SELECT pid FROM Catalog 中。目录表似乎将供应商链接到零件。如果您还没有了解嵌套查询,那么您的讲师可能期待不同的解决方案
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多