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

令和5年度 秋期 午前 問29

データベース

NOT EXISTSに関する問題

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

〔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
答えと解説を見る

✓ これが正解イ2

解説

在庫が 30 を超えない製品は 2 件です。

設問は、製品表と在庫表に対して副問合せを含む SQL 文を実行したときの、結果の行数を問うています。NOT EXISTS は、内側の問合せが 1 行も返さないときに成り立ちます。内側には製品表と在庫表の製品番号を突き合わせる条件が入っているので、外側の製品 1 行ごとに、その製品について在庫数が 30 を超える行があるかどうかを確かめる形になります。ですから読み方は引き算です。まず在庫表から在庫数が 30 を超える行を拾うと 4 行あり、その製品番号は重複をまとめると 3 種類になります。製品表は 5 件なので、そこから 3 種類を除いた 2 件が残ります。正解は 2 です。ここで在庫数がちょうど 30 の行は、30 を超えるという条件に当てはまらない点に注意が必要です。なお製品番号は製品表の主キーなので、DISTINCT が付いていても行数は変わりません。

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

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

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