MySQLでテーブルをJOINする

MySQLで異なるテーブル間の情報をあわせて取得したい場合にJOINを用いる。
大きくわけてINNER JOIN, LEFT JOIN, RIGHT JOINの三種類が存在する。

  1. INNER JOIN
    内部結合とも呼ばれる。ON以下に指定した2つの値を比較し、同じものが存在すれば結合する。片方に存在しなければ何もしない。
SELECT users.name, rooms.name 
FROM users
INNER JOIN rooms
on users.id = rooms.user_id;

この例だとユーザテーブルと部屋テーブルをjoinすることでユーザ名のその人が属する部屋の情報を結合して見ることができる。

  1. LEFT JOIN
    外部結合とも呼ばれる。内部結合では片方にデータが存在しない場合は何もしなかったが、外部結合では存在しない部分をNULLで埋める。
    上の例でINNER JOIN をLEFT JOINに置き換えた場合、users.idがrooms.user_idのなかに存在しないものであってもNULLを含んだレコードを返す。

  2. RIGHT JOIN
    LEFT JOINの逆の挙動をする。rooms.user_idに含まれる数値についてはたとえusers.idに存在しなかったとしてもNULLを含めて返す。