基本情報技術者試験 基本情報技術者試験 平成26年度 春期 午前 午前 問28: "商品"表,"在庫"表に対する次の SQL 文の結果と同じ結果が得られる SQL 文はどれか。ここで,下線部は主キーを表す。 SELECT 商品番号 FROM

基本情報技術者試験 平成26年度 春期 午前
Q 2828 / 80
"商品"表,"在庫"表に対する次の SQL 文の結果と同じ結果が得られる SQL 文はどれか。ここで,下線部は主キーを表す。 SELECT 商品番号 FROM 商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫) 商品(商品番号, 商品名, 単価) 在庫(倉庫番号, 商品番号, 在庫数)
元のSQL文(SELECT 商品番号 FROM 商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫))と、商品表(商品番号 主キー、商品名、単価)・在庫表(倉庫番号、商品番号 主キー、在庫数)のスキーマ
この問の正解率:64.75%(1,129件)
この問題の本文・選択肢・正解・解説(展開)

問題本文

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

選択肢

  • .SELECT 商品番号 FROM 在庫 WHERE EXISTS (SELECT 商品番号 FROM 商品)
  • .SELECT 商品番号 FROM 在庫 WHERE NOT EXISTS (SELECT 商品番号 FROM 商品)
  • .SELECT 商品番号 FROM 商品 WHERE EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)
  • .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 で取り出しており、元クエリと等価です。

基本情報技術者試験 平成26年度 春期 午前過去問一覧へ戻る・問28