LEFT OUTER JOIN|情報処理安全確保支援士試験 令和4年秋期午前Ⅱ 問21

出典:令和4年秋期 午前Ⅱ 問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
  • ア: 
  • イ: 
  • ウ: 
  • エ: 
解説

LEFT OUTER JOINは、左側の表、今回であれば表Rの行をすべて残し、結合条件に一致する表Sの行があれば結合する処理です。

結合条件はR.X = S.Xです。表RのXはA001、A002、A003、A005であり、表Sに一致するのはA002とA003だけです。そのため、A001とA005については、表S側の列C、DがNULLになります。

結果は、A001、A002、A003、A005の4行になり、A002とA003だけSの値が入るので、が適切です。

❌他選択肢が誤りの理由
ア:A001とA005だけが出力され,S側の列がNULLになる。
⇒これは、表Rにだけ存在し、表Sに一致しない行だけを取り出した結果です。LEFT OUTER JOINでは、未一致の行だけでなく、一致したA002、A003の行も出力されます。
イ:A002、A003、A004が出力される。
⇒これは、表S側の行を基準にした結果に近いです。今回のSQLはR LEFT OUTER JOIN Sなので、左側である表Rの行をすべて残します。表Rに存在しないA004は出力されません。
エ:A001、A002、A003、A004、A005が出力される。
⇒これは、両方の表に存在する行をすべて残すFULL OUTER JOINの結果に近いです。今回のSQLはLEFT OUTER JOINなので、表Sにだけ存在するA004は出力されません。
TSUNAGARU-ADVICE

まず押さえたいこと

LEFT OUTER JOINは、左側に書かれた表の行をすべて残し、条件に一致する右側の表の行を結合します。一致しない場合、右側の列にはNULLが入ります。

迷ったときの判断軸

このSQLでは、左側が表Rなので、RのA001、A002、A003、A005はすべて結果に残ります。そのうちSにも存在するA002とA003だけが結合され、A001とA005はS側の値がNULLになります。したがって、Rの全行を残して、Sにない行はNULLで補う結果を選びます。

科目Bにつなげるために

科目Bでは、SQLの結合結果を表から読み取る問題が出ることがあります。INNER JOINは一致した行だけ、LEFT OUTER JOINは左表をすべて残すという違いを押さえ、どちらの表を基準にしているかを最初に確認しましょう。※DB関連試験向け