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. サプライヤが存在する部品の pname を一覧表示する

    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. 一部の部品の平均コストよりも多くの部品を請求するサプライヤの sid を見つけます (その部品を供給するすべてのサプライヤの平均)。

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

2 に答える 2

0

ここで練習できます.... http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

DBAにならなくても大いに役立つスキルです。

于 2013-11-04T05:29:25.403 に答える
0

これは私の最善の答えですが、まだテストしていません

サプライヤが存在する部品の pname を一覧表示する

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

一部の部品の平均コストよりも多くの部品を請求するサプライヤの sid を見つけます (その部品を供給するすべてのサプライヤの平均)。

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 に答える