令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問6
テクノロジ/データベース“文書”表,“社員”表から結果を得る SQL 文の a に入れる字句はどれか。 〔SQL 文〕 SELECT 文書ID, 作成者ID, A.氏名 AS 作成者氏名, 承認者ID, B.氏名 AS 承認者氏名 FROM [ a ]

出典:令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問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
正解:ア
解説
結果表では文書ID4の作成者ID500が“社員”表に存在しないため作成者氏名がNULLとなっていますが,承認者側は全て一致しています。これを実現するには,基点となる“文書”表に対して“社員”表を2回,異なる別名(A,B)で左外結合すればよいです。文書を主体としてA,Bの両方にLEFT OUTER JOINを連結することで,一致しない作成者側の行も欠落させずにNULLを補って結果に含めることができます。
選択肢ごとの解説
- ア正しい。“文書”表を基点として“社員”表を別名A,Bで2回左外結合することで,一致しない行(作成者IDが存在しない文書ID4)でもNULLを補って結果に含めることができます。
- イ誤り。RIGHT OUTER JOINでは“社員”表側を基準に結合するため,社員に対応しない文書が結果から除外されたり,逆に一致しない社員側の行にNULLが入るなど,求める結果にはなりません。
- ウ誤り。FROM句にコンマで“社員 A”,“社員 B”を並べたうえで重ねてLEFT OUTER JOINを記述するのは構文として整合しておらず,このような記述はできません。
- エ誤り。WHERE句で結合条件を指定する内結合では,一致しない行(作成者IDが社員表にない文書ID4)が結果から除外されてしまい,NULLを含む結果は得られません。