データ操作 (全60問中20問目)
No.20
"商品"表,"在庫"表に対する次のSQL文と,同じ結果が得られるSQL文はどれか。ここで,下線部は主キーを表す。
出典:平成26年春期 問28
- [出題歴]
- 基本情報技術者 H22春期 問31
分類
テクノロジ系 » データベース » データ操作
正解
エ
解説
まず設問のSQL文ですが、(SELECT 商品番号 FROM 在庫)の副問合せで"在庫"表の商品番号列に存在する値のリストを作成し、それを"商品"表の商品番号列と比較しています。比較演算子はNOT INなので、"商品"表の商品番号列の中で、"在庫"表の商品番号列に存在しない商品番号のリストが得られます。EXISTSは、親表の行を1行ずつ処理し、続く相関副問合せによって返された結果行が1つ以上存在すれば真、1つもなければ偽を返す句です。INとEXISTSは異なる意味ですが、使い方を工夫することで同じ結果を返すことが可能です。
- "在庫"表の商品番号のうち、"商品"表の商品番号列の値として存在する行が得られます。上記の例でいえば、商品番号{101, 105, 102, 104}が返されます。
- "在庫"表の商品番号のうち、"商品"表の商品番号列の値として存在しない行が得られます。上記の例でいえば、"結果なし"が返されます。
- 副問合せは、現在処理中の"商品"表の商品番号が、"在庫"表の商品番号として存在する場合に1行以上を返します。"EXISTS = 真"となる行は、両表に含まれる商品番号になります。上記の例でいえば、商品番号{101, 102, 104, 105}が返されます。
- 正しい。副問合せは、現在の"商品"表の商品番号が"在庫"表の商品番号として存在する場合に1行以上を返します。"NOT EXISTS = 真"となる行は、"商品"表に商品番号があるが、"在庫"表にはその商品番号がない行になります。上記の例でいえば、商品番号{103, 106}が返されます。