過去問解きまくり研究所 ホーム

平成22年度 春期 午前Ⅱ 問14

データ操作

副問合せに関する問題

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

SELECT DISTINCT 製品番号 FROM 製品
     WHERE NOT EXISTS (SELECT 製品番号 FROM 在庫
          WHERE 在庫数 > 30 AND 製品.製品番号 = 在庫.製品番号)

製品

製品番号製品名単価
AB1805CD-ROM ドライブ15,000
CC5001ディジタルカメラ65,000
MZ1000プリンタ A54,000
XZ3000プリンタ B78,000
ZZ9900イメージスキャナ98,000

在庫

倉庫コード製品番号在庫数
WH100AB180520
WH100CC5001200
WH100ZZ9900130
WH101AB1805150
WH101XZ300030
WH102XZ300020
WH102ZZ990010
WH103CC500140
答えと解説を見る

✓ これが正解イ2

解説

30 を超える在庫がない製品は MZ1000 と XZ3000 の 2 件です。

NOT EXISTS の副問合せは、製品ごとに、在庫数が 30 を超える在庫の行が一つでもあるかを調べ、一つもない製品だけを残します。製品ごとに見ると、AB1805 は WH101 に 150、CC5001 は WH100 に 200 と WH103 に 40、ZZ9900 は WH100 に 130 があるので除かれます。XZ3000 は 30 と 20 で、30 は 30 を超えないので該当する行がなく残ります。MZ1000 は在庫表に行が一つもないので、条件に合う行も存在せず残ります。結果は MZ1000 と XZ3000 の 2 行です。NOT EXISTS は副問合せの行が 1 件もないときに真になるので、在庫表に現れない製品も結果に入ることを見落とさないのが要点です。

ほかの選択肢はなぜ違うのか

出典:平成22年度 春期 データベーススペシャリスト試験 午前Ⅱ 問14

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)