令和4年度 秋期 情報処理安全確保支援士試験 午前II 問21

表Rと表Sに対して,次のSQL文を実行した結果はどれか。

〔SQL文〕

SELECT R.X AS A, R.Y AS B, S.X AS C, S.Z AS D
    FROM R LEFT OUTER JOIN S ON R.X = S.X
表R
図の説明テキスト

R

X Y
A001 10
A002 20
A003 30
A005 50
表S
図の説明テキスト

S

X Z
A002 20
A003 30
A004 40
解答・解説

正解: ウ.

本問は、SQLの LEFT OUTER JOIN (左外部結合)の動作を問う問題です。

左外部結合(LEFT OUTER JOIN)の特性

FROM R LEFT OUTER JOIN S ON R.X = S.X というSQL文は、表R(左表)と表S(右表)を X 列の値で結合します。

  • 左表(R)のすべての行 が結果に必ず含まれます。
  • 結合条件(R.X = S.X)に一致する表S(右表)の行があれば、そのデータを結合して表示します。
  • 一致する表Sの行が存在しない場合、表S側の列(このSQLでは S.X AS C および S.Z AS D)には NULL(空値) が入ります。

したがって、実行結果は「表Rの全行が抽出され、表Sに該当するデータがない行のC列・D列が空欄(NULL)」となっている表になります。

各選択肢の解説

  • ア:誤り。INNER JOIN(内部結合)など、両方の表に一致するデータのみが抽出されているか、異なる結合条件の結果になっています。
  • イ:誤り。結合結果の行数や空値の入り方が LEFT OUTER JOIN の仕様と合致していません。
  • ウ:正解。表Rの全レコードが出力されており、表Sに一致するデータがない行について C と D の列が正しく空値(NULL)になっています。
  • エ:誤り。表S(右表)を基準とした RIGHT OUTER JOIN(右外部結合)や、FULL OUTER JOIN の結果などであり、左表の全行抽出という条件を満たしていません。

Spineチーム