NOT EXISTS を使った SQL の結果
出典: 令和5年度 秋期 応用情報技術者試験 午前 問29 (IPA)
“製品”表と“在庫”表に対し,次の 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 |
- ア 1
- イ 2
- ウ 3
- エ 4
正解と解説を見る
正解: イ
- ア: 1 行だと、在庫がまったくない MZ1000 か、在庫数がちょうど 30 の XZ3000 のどちらかを見落としています。
- イ: MZ1000 と XZ3000 の 2 行なので正しい答えです。
- ウ: 3 行になる組合せはありません。在庫数 > 30 の在庫がある製品は除かれます。
- エ: 4 行になる組合せはありません。在庫数 > 30 の在庫がある製品は除かれます。
ポイント
NOT EXISTS は「副問合せの結果が 1 行もない」ときに真になります。つまり 在庫数が 30 より多い在庫が 1 つもない製品 を探します。
| 製品番号 | 在庫数 | 30 超の在庫 | 結果 |
|---|---|---|---|
| AB1805 | 20,150 | あり | × |
| CC5001 | 200,40 | あり | × |
| MZ1000 | (なし) | なし | ○ |
| XZ3000 | 30,20 | なし (30 は 30 超ではない) | ○ |
| ZZ9900 | 130,10 | あり | × |
よって 2 行 です。