過去問解きまくり研究所 ホーム

平成30年度 春期 午前Ⅱ 問5

データ操作

相関副問合せに関する問題

“社員”表に対して,SQL文を実行して得られる結果はどれか。ここで,実線の下線は主キーを表し,表中の‘NULL’は値が存在しないことを表す。

社員

社員コード上司社員名
S001NULLA
S002S001B
S003S001C
S004S003D
S005NULLE
S006S005F
S007S006G

〔SQL文〕

SELECT 社員コード FROM 社員 X
  WHERE NOT EXISTS
    (SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司)

選択肢は原典では列名「社員コード」の結果表。

答えと解説を見る

✓ これが正解ウ社員コード:S002,S004,S007

解説

誰の上司にもなっていない社員S002・S004・S007が残ります。

見分ける軸は、相関副問合せが外側の行ごとに何を調べているかです。外側の社員Xの1行ごとに、Yの中にX.社員コードを上司に持つ行があるかを調べ、NOT EXISTSなので、そのような行が一つもないXだけを残します。つまり、誰の上司にもなっていない社員が結果です。上司の列に現れる社員コードを集めると、S001(S002とS003の上司)、S003(S004の上司)、S005(S006の上司)、S006(S007の上司)です。全7人からこの4人を除くと、S002・S004・S007の3人が残ります。NULLの上司は誰とも一致しないので、結果には影響しません。EXISTSの問は、副問合せを外側の1行に固定して読むと確実に評価できます。

ほかの選択肢はなぜ違うのか

出典:平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問5

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)