2013-11-04 19 views
0

我目前正在爲一個數周的數據庫考試而學習,他們提供的過去的論文(沒有答案)給了我一些問題。無法弄清楚如何完成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

回答

0

這是在回答我最好的拍攝,但我沒有測試它部分的又

列出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'語句中。目錄表似乎將供應商鏈接到零件。 如果您還沒有了解嵌套查詢,那麼您的講師可能會期待一個不同的解決方案 –