基本情報技術者試験 過去問解説

SQLとは?基本情報技術者試験 平成26年度 春期 午前 問28を解説

基本情報技術者試験 平成26年度 春期 午前 問28は、SQLに関する理解を問う問題です。検索から入っても、問題文、選択肢、正解、解説、各選択肢がなぜ違うかをこのページだけで確認できます。

問題文

"商品"表,"在庫"表に対する次の SQL 文の結果と同じ結果が得られる SQL 文はどれか。ここで,下線部は主キーを表す。 SELECT 商品番号 FROM 商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫) 商品(商品番号, 商品名, 単価) 在庫(倉庫番号, 商品番号, 在庫数)
元のSQL文(SELECT 商品番号 FROM 商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫))と、商品表(商品番号 主キー、商品名、単価)・在庫表(倉庫番号、商品番号 主キー、在庫数)のスキーマ

この問題の出題ポイント

  • SQLの定義だけでなく、問題文中の条件がどの選択肢に当てはまるかを確認する。
  • 関連タグ: SQL、ビジネスモデル、メモリ、関係モデル。

選択肢

  1. SELECT 商品番号 FROM 在庫 WHERE EXISTS (SELECT 商品番号 FROM 商品)
  2. SELECT 商品番号 FROM 在庫 WHERE NOT EXISTS (SELECT 商品番号 FROM 商品)
  3. SELECT 商品番号 FROM 商品 WHERE EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)
  4. SELECT 商品番号 FROM 商品 WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)正解

正解

: SELECT 商品番号 FROM 商品 WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)

解説

元のSQLは「在庫に存在しない商品番号」を商品表から取り出すクエリです。これは『商品.商品番号に対応する在庫行が存在しない』ことを NOT EXISTS で相関副問合せで表すのと等価です。

なぜ他の選択肢が違うのか

  • FROM が在庫表で、商品表との対応もとっておらず元クエリと結果が一致しません。

  • FROM が在庫表である時点で元クエリの対象集合と異なります。

  • EXISTS では在庫に対応行がある商品(=元クエリと逆)が抽出されます。

  • エ(正解)

    商品表をFROMに置き、相関条件で在庫に対応行が「無い」ものを NOT EXISTS で取り出しており、元クエリと等価です。

解き方の整理

SQLの問題では、選択肢のキーワードだけで判断せず、問題文が示す条件と正解選択肢の説明が一致しているかを見ます。誤答選択肢は、似た用語を混ぜる、主体を入れ替える、目的や範囲を広げすぎる、という形で作られることが多いため、選択肢別解説まで確認しておくと復習効率が上がります。

関連問題

前後の問題

平成26年度 春期 午前 の関連する問題

復習を続ける

間違えた問題、苦手タグ、模試履歴を保存して復習する導線を用意しています。広告なしPro、弱点分析、復習リマインダーは段階的に提供予定です。