データベースの基礎
社員表(社員番号, 氏名, 部署ID)に4行あり、部署IDは順に10、20、10、NULLである。部署表(部署ID, 部署名)には部署IDが10、20、30の3行がある。SELECT 社員.氏名, 部署.部署名 FROM 社員 INNER JOIN 部署 ON 社員.部署ID = 部署.部署ID の結果は何行になるか。
- A3行
- B4行
- C12行
答えと解説を見る
正解:A. 3行
INNER JOIN(内部結合)は、ON の条件を満たす行の組み合わせだけを結果にします。部署IDが10の社員2人は部署10の行と、部署IDが20の社員1人は部署20の行と組み合わさるので、結果は3行です。部署IDがNULLの社員は、NULLとの比較が真にならないので、どの部署とも結合されずに結果から消えます。また、社員のいない部署30も結果に出てきません。4行は、社員表のすべての行を残す左外部結合(社員 LEFT OUTER JOIN 部署)の場合の行数です。12行は、条件を付けずにすべての組み合わせを作るCROSS JOIN(直積)の 4 × 3 = 12 行です。
- A. 正しい。部署IDが一致する3組だけが結果になります。
- B. 社員をすべて残す左外部結合の場合の行数です。部署IDがNULLの社員は、内部結合では消えます。
- C. 結合の条件を付けずに、すべての組み合わせを作った直積の行数(4 × 3)です。