MySQLで異なるテーブル間の情報をあわせて取得したい場合にJOINを用いる。
大きくわけてINNER JOIN, LEFT JOIN, RIGHT JOINの三種類が存在する。
- INNER JOIN
内部結合とも呼ばれる。ON以下に指定した2つの値を比較し、同じものが存在すれば結合する。片方に存在しなければ何もしない。
SELECT users.name, rooms.name FROM users INNER JOIN rooms on users.id = rooms.user_id;
この例だとユーザテーブルと部屋テーブルをjoinすることでユーザ名のその人が属する部屋の情報を結合して見ることができる。
LEFT JOIN
外部結合とも呼ばれる。内部結合では片方にデータが存在しない場合は何もしなかったが、外部結合では存在しない部分をNULLで埋める。
上の例でINNER JOIN をLEFT JOINに置き換えた場合、users.idがrooms.user_idのなかに存在しないものであってもNULLを含んだレコードを返す。RIGHT JOIN
LEFT JOINの逆の挙動をする。rooms.user_idに含まれる数値についてはたとえusers.idに存在しなかったとしてもNULLを含めて返す。