データベーススペシャリスト令和4年秋期 午前Ⅱ 問6

問6

"文書"表,"社員"表から結果を得るSQL文はどれか。
06_1.gif/image-size:440×156
〔結果〕
06_2.gif/image-size:425×114
〔SQL文〕
06_3.gif/image-size:401×46
  • 06a.gif/image-size:474×44
  • 06i.gif/image-size:474×43
  • 06u.gif/image-size:474×73
  • 06e.gif/image-size:474×43

分類

テクノロジ系 » データベース » データ操作

正解

解説

〔結果〕を見ると、作成者氏名として"文書"表の作成者IDに対応する"社員"表の氏名を表示し、承認者氏名として"文書"表の承認者IDに対応する"社員"表の氏名を表示していることがわかります。また、作成者ID:500の行の作成者氏名をNULLとして表示していることから、"社員"表に対応する社員IDがない行についても結果に出力しなければなりません。単純に内部結合(INNER JOIN)をしてしまうと、作成者ID:500の行が消えてしまうので、左外部結合(LEFT OUTET JOIN)を使うことになります。
  • 正しい。"文書"表と"社員"表を作成者IDをキーとして左外部結合し、"文書"表と"社員"表を承認者IDをキーとして左外部結合しています。これにより作成者IDと作成者氏名、承認者IDと承認者氏名が紐付けられ、かつ、"社員"表に対応する行がない場合にはNULLが表示されることになります。
    06aa.gif/image-size:405×126
  • 右外部結合だと、"社員"の社員ID:500の行が消えてしまうため不適切です。2段階で右外部結合が行われた結果、SQLの実行結果としては以下が出力されます。
    06ii.gif/image-size:405×126
  • 表のエイリアス定義(A・B)が重複しているため、構文エラーとなります。
  • 内部結合ではキーの値が両方の表に共通している行のみが残ります。"文書"表"にしか存在しない社員ID:500の行が消えてしまうため不適切です。
    06ee.gif/image-size:406×101
© 2016-2024 データベーススペシャリストドットコム All Rights Reserved.

Pagetop