データ操作(全67問中21問目)

"倉庫別商品在庫集計"表から在庫数の合計を求めたい。倉庫番号'C003'の倉庫で在庫数が100以上の商品に対して,全ての倉庫における在庫数の合計を求めるSQL文の a に入る適切な字句はどれか。ここで,該当する商品は複数存在するとともに在庫数が100未満の商品も存在するものとする。また,実線の下線は主キーを表す。

 倉庫別商品在庫集計(倉庫番号商品コード,在庫数)

〔SQL文〕
SELECT 商品コード, SUM(在庫数) AS 在庫合計
 FROM 倉庫別商品在庫集計
  WHERE a
  GROUP BY 商品コード

出典:平成27年秋期 問29

  • 29a.png
  • 29i.png
  • 29u.png
  • 29e.png
正解 問題へ
分野:テクノロジ系
中分類:データベース
小分類:データ操作
解説
IN、EXISTS、ALL、ANYは、値の集合や副問合せ(サブクエリ)からの結果セットに対して"真(true)"または"偽(false)"の評価を行う演算子で、主問合せ(メインクエリ)のWHERE句で使用されます。

それぞれの演算子は以下のような評価を行い真偽を返します。
IN
結果セットの値のうちいずれかに一致すれば真を返し、そうでなければ偽を返す。
EXISTS
副問合せの結果セットが1行以上あれば真を返し、そうでなければ偽を返す。
ANY
比較演算子(=、>=、<=、<>)と共に使用され、副問合せの結果セットの値のうち、いずれかが条件を満たせば真を返し、そうでなければ偽を返す。
ALL
比較演算子と共に使用され、副問合せの結果セットの値の全てが条件を満たした場合にだけ真を返し、そうでなければ偽を返す。
設問のSQL内の副問合せは、ほぼ同じで表から倉庫番号が'C003'、かつ在庫数が100個以上のレコードの商品コードを抽出するものです。この副問合せの結果は商品コードの値の集合となります。
  • 副問合せの結果が複数行になるので、単一の値と比較することを前提とした比較演算子の"="だとエラーになります。
  • 1つの商品コードが結果セットの商品コードの集合の全て(ALL)と一致することはないため、主問合せのWHERE句の条件にマッチする行は存在しません。
  • 正しい。主問合せの各行の商品コードに対して、副問合せの結果セットに含まれるかを判定することで集計対象となる行のみに絞り込みができます。
  • 副問合せは1行以上の結果セットを返しEXISTSは常に真と判定されるため、条件による絞り込みが機能しません。

Pagetop