令和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文の動作
サブクエリの評価
SELECT 製品番号 FROM 在庫 WHERE 在庫数 > 30 AND 製品.製品番号 = 在庫.製品番号
ここでは、メインクエリで評価中の「製品」表のレコードと同じ製品番号を持ち、かつ 在庫数が30より大きい 「在庫」表のレコードを検索しています。NOT EXISTS の評価
WHERE NOT EXISTS (...)
NOT EXISTS は、カッコ内のサブクエリが1行も結果を返さない場合に真(TRUE)となります。
つまり、「在庫数が30を超える関連レコードが存在しない」製品が抽出条件となります(在庫が全くない、あるいは在庫があっても全て30以下である製品)。結果の取得
SELECT DISTINCT 製品番号 FROM 製品
抽出条件を満たす製品について、DISTINCT によって重複を排除した製品番号を取得します。問題の前提となる表データにおいて、この条件に合致する一意の製品番号が2種類存在するため、結果として得られる表の行数は 2行 となります。
各選択肢の解説
- ア (1): 抽出条件の解釈(不等号の向きやNOTの有無など)を誤り、該当する製品を1つとみなしてしまった場合の誤答です。
- イ (2): 正解 です。条件を満たす製品番号は2つとなります。
- ウ (3): 逆に「在庫数が30を超えるレコードが存在する」製品の数をカウントしたり、条件を誤解して数え間違えたりした場合の誤答です。
- エ (4):
WHERE句による絞り込みを考慮せず、製品表の全製品番号の数をそのままカウントしてしまった場合などの誤答です。