次の社員表と部署表について、下のSQL文を実行したとき、結果として得られる行の数はいくつか。
| 社員 | |||
|---|---|---|---|
| 社員番号 | 氏名 | 部署コード | 給与 |
| 101 | 青木 | D1 | 30 |
| 102 | 井上 | D2 | 25 |
| 103 | 上田 | D1 | 35 |
| 104 | 江藤 | NULL | 28 |
| 105 | 小野 | D3 | 40 |
| 部署 | |
|---|---|
| 部署コード | 部署名 |
| D1 | 営業 |
| D2 | 総務 |
| D3 | 製造 |
| D4 | 開発 |
- ①4行
- ②3行
- ③5行
- ④20行
答えと解説を見る
内部結合(INNER JOIN)は、結合の条件(部署コードが等しい)を満たす行の組だけを結果にします。
青木(D1→営業)、井上(D2→総務)、上田(D1→営業)、小野(D3→製造)の4人は、部署表に同じ部署コードがあるので結果に残ります。江藤さんの部署コードは NULL で、NULL は どの値とも「等しい」と判定されないため、結果に現れません。部署表の開発(D4)も、対応する社員がいないため現れません。
したがって、結果は4行です。
他の選択肢が不適切な理由
・3行:部署コードがD3の小野さんも除外した誤りです。D3は部署表にあるので結果に残ります。
・5行:社員表の全ての行を残す左外部結合(社員表を左)の場合の行数です。
・20行:結合の条件を付けずに全ての組合せを作る直積(5行×4行)の行数です。
覚え方のポイント
「内部結合=両方の表に相手がいる行だけ」「NULLは=で比べても一致しない」。この2点で行数を数えます。