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

“文書”表,“社員”表から結果を得るSQL文の a に入れる字句はどれか。

「文書」表
図の説明テキスト

「文書」表

文書ID 作成者ID 承認者ID
1 100 200
2 100 300
3 200 400
4 500 400
「社員」表
図の説明テキスト

「社員」表

社員ID 氏名
100 山田太郎
200 山本花子
300 川上一郎
400 渡辺良子
〔結果〕の表
図の説明テキスト

〔結果〕の表

文書ID 作成者ID 作成者氏名 承認者ID 承認者氏名
1 100 山田太郎 200 山本花子
2 100 山田太郎 300 川上一郎
3 200 山本花子 400 渡辺良子
4 500 NULL 400 渡辺良子
〔SQL文〕
図の説明テキスト

〔SQL文〕

SELECT 文書ID, 作成者ID, A.氏名 AS 作成者氏名,
       承認者ID, B.氏名 AS 承認者氏名 FROM <span id="q6_blank_a" class="blank-label">a</span>
解答・解説

正解: ア. 文書 LEFT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID
  LEFT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID

本設問は、「文書」表を基準として、作成者と承認者の名前を「社員」表から取得するSQL文の穴埋め問題です。
「文書」表の「承認者ID」には、未承認などの理由で値が入っていない(NULL)可能性があります。
もし通常の結合(内部結合)を使用すると、承認者IDがNULLの文書は結合条件を満たさず、結果から除外されてしまいます。
そのため、「文書」表のすべての行を出力しつつ、一致する社員情報があれば結合する 外部結合(LEFT OUTER JOIN)を使用する必要があります。
また、「作成者」と「承認者」で同じ「社員」表を参照するため、表に別名(A および B)をつけて区別します。

各選択肢の解説

  • ア(正解):LEFT OUTER JOIN を使用しており、「文書」表を基準にして「社員」表を結合しています。これにより、承認者IDがNULLの文書も結果に含まれます。
  • イ:RIGHT OUTER JOIN を使用しているため、「社員」表が基準となります。これでは、文書の作成や承認に関わっていない社員も出力される一方で、意図した文書の抽出が正しく行われません。
  • ウ:テーブルをカンマで区切って指定した上で LEFT OUTER JOIN を続けており、SQLの標準的な構文として誤っています。
  • エ:WHERE 句を用いた通常の結合(内部結合)です。この場合、承認者IDがNULL(未設定)の文書が抽出結果から除外されてしまうため誤りです。

Spineチーム