データ操作(全67問中21問目)
No.21解説へ
"倉庫別商品在庫集計"表から在庫数の合計を求めたい。倉庫番号'C003'の倉庫で在庫数が100以上の商品に対して,全ての倉庫における在庫数の合計を求めるSQL文の a に入る適切な字句はどれか。ここで,該当する商品は複数存在するとともに在庫数が100未満の商品も存在するものとする。また,実線の下線は主キーを表す。
倉庫別商品在庫集計(倉庫番号,商品コード,在庫数)
〔SQL文〕
倉庫別商品在庫集計(倉庫番号,商品コード,在庫数)
〔SQL文〕
SELECT 商品コード, SUM(在庫数) AS 在庫合計
FROM 倉庫別商品在庫集計
WHERE a
GROUP BY 商品コード
FROM 倉庫別商品在庫集計
WHERE a
GROUP BY 商品コード
出典:平成27年秋期 問29
広告
解説
IN、EXISTS、ALL、ANYは、値の集合や副問合せ(サブクエリ)からの結果セットに対して"真(true)"または"偽(false)"の評価を行う演算子で、主問合せ(メインクエリ)のWHERE句で使用されます。
それぞれの演算子は以下のような評価を行い真偽を返します。
それぞれの演算子は以下のような評価を行い真偽を返します。
- IN
- 結果セットの値のうちいずれかに一致すれば真を返し、そうでなければ偽を返す。
- EXISTS
- 副問合せの結果セットが1行以上あれば真を返し、そうでなければ偽を返す。
- ANY
- 比較演算子(=、>=、<=、<>)と共に使用され、副問合せの結果セットの値のうち、いずれかが条件を満たせば真を返し、そうでなければ偽を返す。
- ALL
- 比較演算子と共に使用され、副問合せの結果セットの値の全てが条件を満たした場合にだけ真を返し、そうでなければ偽を返す。
- 副問合せの結果が複数行になるので、単一の値と比較することを前提とした比較演算子の"="だとエラーになります。
- 1つの商品コードが結果セットの商品コードの集合の全て(ALL)と一致することはないため、主問合せのWHERE句の条件にマッチする行は存在しません。
- 正しい。主問合せの各行の商品コードに対して、副問合せの結果セットに含まれるかを判定することで集計対象となる行のみに絞り込みができます。
- 副問合せは1行以上の結果セットを返しEXISTSは常に真と判定されるため、条件による絞り込みが機能しません。
広告