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

〔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

- ア:
- イ:
- ウ:
- エ:
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関連試験向け
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は出力されません。