HOME»データベーススペシャリスト平成30年春期»午前Ⅱ 問5
データベーススペシャリスト平成30年春期 午前Ⅱ 問5
問5
"社員"表に対して,SQL文を実行して得られる結果はどれか。ここで,実線の下線は主キーを表し,表中の'NULL'は値が存在しないことを表す。〔SQL文〕
- [出題歴]
- データベース R2秋期 問8
- データベース R4秋期 問8
分類
テクノロジ系 » データベース » データ操作
正解
ウ
解説
このSQL文では、副問合せ中に主問合せ側のX表の"社員コード"の値が使用されているため相関副問合せになります。相関副問合せでは、主問合せ側の1行ごとに副問合せのSQL文が実行されていきます。最初から順を追って説明していくので、相関副問合せがどのように処理されていくのかを確実に把握しておきましょう。
まず1行目から考えていきます。副問合せの「X.社員コード」の部分には、現在処理中の1行目の"社員コード"の値であるS001が代入されます。
次に2行目について考えていきます。副問合せの「X.社員コード」の部分には、現在処理中の2行目の"社員コード"の値であるS002が代入されます。
この2つのケースから主問合せ側のWHERE句は、その"社員コード"がいずれかの行の"上司"に設定されている場合は偽、されていない場合には真を返すことがわかります。このため設問のSQL文を実行すると、どの社員の上司にもなっていない社員コードであるS002、S004、S007が抽出されることになります。よって「ウ」が正解です。
まず1行目から考えていきます。副問合せの「X.社員コード」の部分には、現在処理中の1行目の"社員コード"の値であるS001が代入されます。
SELECT * FROM 社員 Y
WHERE S001 = Y.上司
この副問合せは、社員表から"上司"列の値がS001である行を抽出します。つまり、社員表のうち"社員コード"の値がS002及びS003の2つの行から成る結果セットが返されます。主問合せのWHERE句ではNOT EXISTS、すなわち副問合せの結果が0行となる場合に真を返すため、1行目は偽と判定され抽出対象になりません。WHERE S001 = Y.上司
次に2行目について考えていきます。副問合せの「X.社員コード」の部分には、現在処理中の2行目の"社員コード"の値であるS002が代入されます。
SELECT * FROM 社員 Y
WHERE S002 = Y.上司
この副問合せは、社員表から"上司"列の値がS002である行を抽出します。社員表には"上司"の値がS002である行は存在しないので、結果セットは0行になります。結果セットが0行なので、2行目はNOT EXISTSで真と判定され抽出対象になります。WHERE S002 = Y.上司
この2つのケースから主問合せ側のWHERE句は、その"社員コード"がいずれかの行の"上司"に設定されている場合は偽、されていない場合には真を返すことがわかります。このため設問のSQL文を実行すると、どの社員の上司にもなっていない社員コードであるS002、S004、S007が抽出されることになります。よって「ウ」が正解です。