SQLにおける複数テーブルの外部結合

〔結果〕表に注目すると、文書ID=4 の行において「作成者ID=500」に対応する社員レコードが社員表に存在しないにもかかわらず、文書表の行が欠落せずに結果に含まれ、作成者氏名が NULL となっています。 これは「文書」表を基準(主表)とし、対応する社員情報が存在しない場合でも文書レコードを残す「左外部結合(LEFT OUTER JOIN)」が行われていることを示しています。 また、作成者と承認者の両方の氏名を取得するため、社員表をそれぞれ異なる別名(A と B)で参照し、以下のように2段階で LEFT OUTER JOIN を行います: 文書 LEFT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID  LEFT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID したがって、ア が正解です。 RIGHT OUTER JOIN を指定すると社員表が主表となり、文書表に存在しない社員が含まれたり、作成者ID=500 の文書レコード(社員側に存在しない)が結果から除外されてしまいます。 FROM 句で「文書, 社員 A, 社員 B」とクロス結合(直積)した後に LEFT OUTER JOIN を記述する構文は SQL の文法として誤りです。 カンマ結合と WHERE 句による結合条件は「内部結合(INNER JOIN)」となるため、作成者ID=500 の行は社員表に結合相手が存在せず結果から除外されてしまいます。

“文書” 表, “社員” 表から結果を得る 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文〕 SELECT 文書ID, 作成者ID, A.氏名 AS 作成者氏名,     承認者ID, B.氏名 AS 承認者氏名 FROM  a 

出典2022r04a_db_am2_問6
ア
文書 LEFT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID  LEFT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID
イ
文書 RIGHT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID  RIGHT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID
ウ
文書, 社員 A, 社員 B  LEFT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID  LEFT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID
エ
文書, 社員 A, 社員 B  WHERE 文書.作成者ID = A.社員ID AND 文書.承認者ID = B.社員ID