JOINは条件の合う行を結合します。一致しない行を除くか、NULLで補って残すかがJOINの種類によって異なります。
2つのテーブルをJOINするシミュレータ
1. JOINの種類を選択
2. 行を順に照合
学生 s
履修 e
結果
次のステップで学生を1行ずつ確認します。右のベン図は残す範囲を示します。
INNER一致した行のみ
LEFT左の全行+一致
RIGHT右の全行+一致
FULL OUTER両側の全行
一致しない列NULL
OUTER JOINは一致しない行も残します
LEFT JOINは左の全行を残し、右に一致がなければNULLを入れます。未履修の学生を探すには、LEFT JOINの後に WHERE e.student_id IS NULLを指定します。
一致が複数あれば左の行も複製されます。2科目を履修した学生は2行になります。JOIN後のCOUNTが予想より多い場合は、この複製を確認してください。
面接でよく聞かれる点
LEFT JOIN後のWHEREで右側に条件を課すと、NULL行が落ちてINNER JOIN相当になることがあります。左の行を残したければ条件をONに置きます。CROSS JOINの行数はm×nです。