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

问题描述:

我目前正在为一个数周的数据库考试而学习,他们提供的过去的论文(没有答案)给了我一些问题。无法弄清楚如何完成sql语句

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

谢谢...

有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. 查找供应商谁提供一个红色的小岛屿发展中国家部分或绿色部分

    SELECT sid 
    FROM Catalog, Parts 
    WHERE Catalog.pid = Parts.pid 
    AND Parts.color = 'red' 
    OR Parts.color = 'green'; 
    
  3. 查找supp的脚本谁收取更多的某些部分比部分的平均成本liers(平均超过所有谁提供的那部分供应商)

    SELECT sid 
    FROM Catalog 
    WHERE cost > (AVG(cost)); 
    
+0

没有必要重复WHERE语句。它从'WHERE'开始,所有其他条件都添加了'AND'或'OR'运算符。 – Sebas

+0

好的,谢谢你的提示,我不确定是否必须再说一遍。除此之外,它看起来不错吗? – user2288946

+0

hmm,您在条件(WHERE)或SELECT中使用的所有表必须包含在FROM语句中,如果有多个表,则会将它们连接在一起。 – Sebas

这是在回答我最好的拍摄,但我没有测试它部分的又

列出pnames对此有一些供应商

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

查找供应商谁提供一个红色的部分或股份公司的小岛屿发展中国家颖部分

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

查找谁收取更多的某些部分比部分的平均成本供应商的小岛屿发展中国家(平均超过所有谁提供该零件的供应商),你可以在这里练习

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 
+0

感谢您的帮助,我对Parts.pid有些困惑。 你是说零件中的pid不在目录中的pid中?你不需要看看哪里没有供应商? – user2288946

+0

我想说,如果零件没有供应商,那么它的'pid'将永远不会出现在'SELECT pid FROM Catalog'语句中。目录表似乎将供应商链接到零件。 如果您还没有了解嵌套查询,那么您的讲师可能会期待一个不同的解决方案 –

。 ... http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

即使您不成为DBA,这对您而言也是非常有用的技能。