結合(JOIN)

昔やったけど、うろ覚えだったので今回きちんと整理してみる。
結合には大きく分けて2種類。内部結合(INNER JOIN)と外部結合(OUTER JOIN)がある。

  • 内部結合
    • 結合条件に指定したidが両方のテーブルに存在する場合のみ結果セットに含める
    • SQL構文はINNER JOIN

例)

select a.user_id, b.to_id, b.mail_body
from user_data a INNER JOIN mail_data b
on a.user_id=b.from_id;

user_dataとmail_dataを結合させ、送信履歴を取得するSQL

  • 外部結合
    • 結合条件に指定したidがどちらかのテーブルに存在しなくても結果セットに含める
    • 左側のテーブルを優先するなら左外部結合、右側のテーブルを優先するなら右外部結合
    • SQL構文はLEFT (OUTER) JOIN, RIGHT (OUTER) JOIN

例)

select a.user_id, b.to_id, b.mail_body
from user_data a LEFT OUTER JOIN mail_data b
on a.user_id=b.from_id;

user_dataとmail_dataを結合させ、送信履歴を取得するSQL
送信したことがないユーザはto_id, mail_body列がNULLになる。