令和5年度 秋期 応用情報技術者試験 午前 問29

テクノロジデータベース

この問題は2023(R5)秋 応用情報技術者 午前に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

“製品”表と“在庫”表に対し,次のSQL文を実行した結果として得られる表の行数は幾つか。

SELECT DISTINCT 製品番号 FROM 製品
    WHERE NOT EXISTS (SELECT 製品番号 FROM 在庫
        WHERE 在庫数 > 30 AND 製品.製品番号 = 在庫.製品番号)
「製品」表
図の説明テキスト

「製品」というタイトルが付いた表。

製品番号 製品名 単価
AB1805 CD-ROMドライブ 15,000
CC5001 デジタルカメラ 65,000
MZ1000 プリンタA 54,000
XZ3000 プリンタB 78,000
ZZ9900 イメージスキャナ 98,000
「在庫」表
図の説明テキスト

「在庫」というタイトルが付いた表。

倉庫コード 製品番号 在庫数
WH100 AB1805 20
WH100 CC5001 200
WH100 ZZ9900 130
WH101 AB1805 150
WH101 XZ3000 30
WH102 XZ3000 20
WH102 ZZ9900 10
WH103 CC5001 40

解答・解説を読む

正解: 選択肢

本問は、SQLの 相関サブクエリEXISTS述語 の動作を理解しているかを問う問題です。

実行されるSQL文の動作

  1. サブクエリの評価
    SELECT 製品番号 FROM 在庫 WHERE 在庫数 > 30 AND 製品.製品番号 = 在庫.製品番号
    ここでは、メインクエリで評価中の「製品」表のレコードと同じ製品番号を持ち、かつ 在庫数が30より大きい 「在庫」表のレコードを検索しています。

  2. NOT EXISTS の評価
    WHERE NOT EXISTS (...)
    NOT EXISTS は、カッコ内のサブクエリが1行も結果を返さない場合に真(TRUE)となります。
    つまり、「在庫数が30を超える関連レコードが存在しない」製品が抽出条件となります(在庫が全くない、あるいは在庫があっても全て30以下である製品)。

  3. 結果の取得
    SELECT DISTINCT 製品番号 FROM 製品
    抽出条件を満たす製品について、DISTINCT によって重複を排除した製品番号を取得します。問題の前提となる表データにおいて、この条件に合致する一意の製品番号が2種類存在するため、結果として得られる表の行数は 2行 となります。

各選択肢の解説

  • ア (1): 抽出条件の解釈(不等号の向きやNOTの有無など)を誤り、該当する製品を1つとみなしてしまった場合の誤答です。
  • イ (2): 正解 です。条件を満たす製品番号は2つとなります。
  • ウ (3): 逆に「在庫数が30を超えるレコードが存在する」製品の数をカウントしたり、条件を誤解して数え間違えたりした場合の誤答です。
  • エ (4): WHERE 句による絞り込みを考慮せず、製品表の全製品番号の数をそのままカウントしてしまった場合などの誤答です。