データ操作(全67問中5問目)
広告
解説
副問合せ中に、主問合せの対象となっている製品表の属性(製品番号)が使われているので相関副問合せということになります。相関副問合せは、主問合せで処理した行によって副問合せの内容を変えたいときに使う構文で、主問合せの表の1行ごとにその値を使って副問合せが実行されます。製品表の行は5つなので、副問合せも5回行われることになります。
〔1行目 製品番号:AB1805〕
副問合せでは、在庫表から製品番号がAB1805かつ在庫数が30より多い行が選択されるため、副問合せからは以下の1行が返されます。NOT EXISTS句は存在しない場合に"真"を返す比較演算子なので、主問合せのWHERE句は1行目に対して"偽"を返します。
〔2行目 製品番号:CC5001〕
1行目と同様に、副問合せでは製品番号がCC5001かつ在庫数が30より多い行が選択されるため、副問合せからは以下の2行が返されます。結果セットが存在するため、WHERE句は2行目に対して"偽"を返します。
〔3行目 製品番号:MZ1000〕
副問合せでは製品番号がMZ1000かつ在庫数が30より多い行が抽出されます。しかし、在庫表には製品番号MZ1000の行は存在しないため、副問合せの結果はNULLになります。よって、WHERE句は3行目に対して"真"を返します。
〔4行目 製品番号:XZ3000〕
副問合せでは製品番号がXZ3000かつ在庫数が30より多い行が抽出されます。在庫表には製品番号XZ3000の行が2つありますが、どちらも在庫が30以下のため、副問合せの結果はNULLになります。よって、WHERE句は4行目に対して"真"を返します。
〔5行目 製品番号:ZZ9900〕
副問合せでは製品番号がZZ9900かつ在庫数が30より多い行が選択されるため、副問合せからは以下の1行が返されます。結果が存在するため、WHERE句は5行目に対して"偽"を返します。
主問合せのWHERE句が"真"を返した製品番号:MZ1000、XZ3000の2行が選択され、この2行を対象として製品番号列を抜き出すので、結果セットは以下のようになります。したがって、得られる表の行数は2行です。
〔1行目 製品番号:AB1805〕
副問合せでは、在庫表から製品番号がAB1805かつ在庫数が30より多い行が選択されるため、副問合せからは以下の1行が返されます。NOT EXISTS句は存在しない場合に"真"を返す比較演算子なので、主問合せのWHERE句は1行目に対して"偽"を返します。
〔2行目 製品番号:CC5001〕
1行目と同様に、副問合せでは製品番号がCC5001かつ在庫数が30より多い行が選択されるため、副問合せからは以下の2行が返されます。結果セットが存在するため、WHERE句は2行目に対して"偽"を返します。
〔3行目 製品番号:MZ1000〕
副問合せでは製品番号がMZ1000かつ在庫数が30より多い行が抽出されます。しかし、在庫表には製品番号MZ1000の行は存在しないため、副問合せの結果はNULLになります。よって、WHERE句は3行目に対して"真"を返します。
〔4行目 製品番号:XZ3000〕
副問合せでは製品番号がXZ3000かつ在庫数が30より多い行が抽出されます。在庫表には製品番号XZ3000の行が2つありますが、どちらも在庫が30以下のため、副問合せの結果はNULLになります。よって、WHERE句は4行目に対して"真"を返します。
〔5行目 製品番号:ZZ9900〕
副問合せでは製品番号がZZ9900かつ在庫数が30より多い行が選択されるため、副問合せからは以下の1行が返されます。結果が存在するため、WHERE句は5行目に対して"偽"を返します。
主問合せのWHERE句が"真"を返した製品番号:MZ1000、XZ3000の2行が選択され、この2行を対象として製品番号列を抜き出すので、結果セットは以下のようになります。したがって、得られる表の行数は2行です。
広告