データベースの基礎
社員表(社員番号, 氏名, 部署ID)に5行あり、部署IDは順に10、20、10、NULL、NULLである。部署表(部署ID, 部署名)には部署IDが10、20、30の3行がある。SELECT 部署.部署名, 社員.氏名 FROM 部署 LEFT OUTER JOIN 社員 ON 部署.部署ID = 社員.部署ID の結果は何行になるか。
- A3行
- B4行
- C5行
答えと解説を見る
正解:B. 4行
LEFT OUTER JOIN(左外部結合)は、左側の表(ここでは部署表)のすべての行を残し、右側の表に一致する行がなければ、右側の列をNULLで埋めて1行にします。部署10には社員が2人いるので2行、部署20は1行、社員のいない部署30は氏名がNULLの1行になり、合計4行です。部署IDがNULLの社員2人は、どの部署とも一致せず、残す対象ではない右側の表の行なので、結果には出てきません。内部結合なら部署30の行も消えて3行です。表の左右を逆にして 社員 LEFT OUTER JOIN 部署 とすると、社員5人がすべて残るので5行になります。外部結合では、どちらの表の行をすべて残すのかを確かめることが大切です。
- A. 内部結合の場合の行数です。左外部結合では、社員のいない部署30も1行として残ります。
- B. 正しい。部署10の2行、部署20の1行、部署30の(氏名がNULLの)1行で4行です。
- C. 社員表を左側にして、社員をすべて残した場合の行数です。