基本情報技術者試験「外部結合の結果行数」の問題
次の「社員」表と「部署」表を `社員 LEFT OUTER JOIN 部署 ON 社員.部署ID = 部署.部署ID` で結合したとき、結果として得られる行数はいくつか。
社員表
| 社員ID | 部署ID |
|---|---|
| S1 | 10 |
| S2 | 20 |
| S3 | 10 |
| S4 | NULL |
| S5 | 99 |
部署表
| 部署ID | 部署名 |
|---|---|
| 10 | 営業 |
| 20 | 開発 |
| 30 | 総務 |
ア2行になる
イ6行
ウ3行(一致した行だけが残る)
エ5行
正解
エ.5行
LEFT OUTER JOIN は左表(社員)の全行を必ず残す。社員は5行あり、S4(部署IDがNULL)とS5(部署ID99で対応なし)も部署名をNULLとして残るため、結果は左表と同じ5行となり正しい。
?選択肢ごとの解説
ア ×2行は誤りで、結合相手が見つからない行も左外部結合では残るため大幅に少ない。
イ ×6行は左表の行が部署表の複数行と重複対応した場合の数だが、部署IDは部署表で一意なので行は増えず、過大な見積りである。
ウ ×3行(一致した行だけ)は内部結合(INNER JOIN)の結果であり、左外部結合は一致しない行も残す点を取り違えている。
エ ○LEFT OUTER JOIN は左表(社員)の全行を必ず残す。社員は5行あり、S4(部署IDがNULL)とS5(部署ID99で対応なし)も部署名をNULLとして残るため、結果は左表と同じ5行となり正しい。
✎くわしく
内部結合は両表で一致する行だけを返すのに対し、左外部結合は左表の全行を保持し、右表に一致がなければ右表側の列をNULLで補う。結合キーがNULLの行や対応値のない行も左表側として残る点が件数判断の鍵である。
✓本番での押さえどころ
試験のコツ
外部結合の行数は『保持される側の表の行数が下限』。LEFT なら左表の全行が必ず残ると押さえれば件数を即断できる。
覚え方
LEFT は『左を全部残す』。一致しない右側はNULLで穴埋め、と図でイメージする。
よくある誤り
左外部結合を内部結合と混同し一致行(3行)だけを数える、またはNULLや対応なしの行が消えると誤解する。
データベースの他の問題
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-a3-0243