2つの関係 (表) 「商品表」と「生産者表」からなる関係データベースがあるとする。商品IDごとに、販売価格が仕入れ値よりも安い商品の中で最も高い仕入れ値を表示させるSQL文が書かれている。
ア と イ として最も適切なものを@〜Dの中から選べ。ここで、販売価格と仕入れ値は数値データ型とする。
商品表 生産者表
┌───┬─────┬────┐┌────┬───┬────┐
│商品ID│商品名 │販売価格││生産者ID│商品ID│仕入れ値│
├───┼─────┼────┤├────┼───┼────┤
│ 1 │たまねぎ │ 100││ 1 │ 1 │ 60│
├───┼─────┼────┤├────┼───┼────┤
│ 2 │ジャガイモ│ 30││ 2 │ 1 │ 70│
└───┴─────┴────┘├────┼───┼────┤
│ 1 │ 2 │ 37│
├────┼───┼────┤
│ 2 │ 2 │ 25│
└────┴───┴────┘
SELECT A.商品ID, MAX(A.仕入れ値)
FROM 生産者表 AS A, 商品表 AS B
WHERE A.商品ID = B.商品ID
AND ア
(SELECT DISTINCT C.商品ID
FROM 生産者表 AS C, 商品表 AS D
WHERE C.商品ID = D.商品ID AND
C.仕入れ値 > D.販売価格)
イ ;
ア イ
@ B.商品ID IN HAVING A.商品ID
A B.商品ID IN GROUP BY A.商品ID
B B.商品ID = GROUP BY A.商品ID
C B.商品ID = HAVING A.商品ID
D B.商品ID = ORDER BY A.商品ID
A
ア (SELECT ・・・ C.仕入れ値 > D.販売価格) のように括弧の中で該当するものを選択する時には = は使用できず、INを使う。
従って、 ア には B.商品ID IN が入る。
イ は選択したデータをグループ化するため、GROUP BY A.商品ID が入る。
DISTINCTは、重複を削除するための句である。
なお、HAVINGは 検索条件を指定する句である。
また、ORDER BYはソート指定する句である。
W−25 | 目次 | W−27 |